npm

162 阅读3分钟

npm

1. npm init

npm init -y快速生成基础package.json

// package.json
{
  "name": "demo", // 发包时需要的包名 214字以内 无大写字母 非._开头 的url安全字符
  "version": "1.0.0",// 包版本
  "description": "",
  "main": "index.js",
  "files":[],
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

package.json

npm配置

{
  "name": "demo", // 发包时需要的包名 214字以内 无大写字母 非._开头 的url安全字符
  "version": "1.0.0", // 包版本
  // npm 搜索使用
  "description": "demo",
  "keywords": [
    "demo"
  ],
  "main": "index.js", //入口文件。如果这个字段没有设置的话,入口文件就默认为根目录下的index.js文件
  "browser": "index.js", //入口文件 browser端使用
  "files": [], // 见下方注释1
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "bin": {
    "test": "./dist/index.js" // 或者直接string则为包名 见注释2
  },
  "config": { // 配置npm config 运行时会执行npm config set foo:port 8080覆盖process.env.npm_package_config_port环境变量
    "port": 8080
  },
  "dependencies": { // 依赖见3
  },
  "devDependencies": { // 开发依赖项步打包进程序中
  },
  "peerDependencies": { //依赖的模块  npm 3.0 版开始,peerDependencies 不再会默认安装了
  },
  "optionalDependencies": { // 找不到包或者安装包失败时,npm 在该字段中查找
  },
  "bundledDependencies": [ // 包发布时一起打包字段数组中的值必须是在 dependencies, devDependencies 里声明的包
    "demo"
  ],
  "engines": { // 说明对 npm 包的版本或者 Node 版本有特殊要求
    "node": ">=0.10.3 <0.12"
  },
  "directories": { // 目录位置,目前无作用
    "bin": "./bin",
    "lib": "./lib",
    "doc": "./doc",
    "test": "./test",
    //...
  },
  "homepage": "https://github.com/owner/project#readme", // 项目地址
  "man": [
    "./man/doc.1"
  ], // manuel手册 帮助文档 参考linux中man命令 
  "bugs": { //上报bug地址或者 或者使用string 地址
    "url": "https://github.com/owner/project/issues",
    "email": "project@hostname.com"
  },
  "repository": { // 包的仓库地址
    "type": "git",
    "url": "https://github.com/npm/cli.git"
  },
  "private":false, //设置true是不发布包
  "publishConfig":{ // 发布配置时的npm配置
  }, 
  "author": "",
  "license": "ISC"
}


注释

  1. files npm publish发布时的上传文件 默认["*"]全部文件 使用.npmignore文件忽略上传 语法参考.gitignore 。如果不存在该文件将使用.gitignore中的配置 其中部分文件无论怎么配置如.git package-lock.json(可以使用npm-shrinkwrap.json代替)都将忽略或如package.json main字段中的文件等包含 参考npm文档

  2. bin 可执行文件字段。存在改字段就会在 node_modules 文件夹下面的 .bin 目录中复制了 bin 字段链接的执行文件。我们在调用执行文件时,可以不带路径,直接使用命令名来执行相对应的执行文件。全局安装该包时则在npm的.bin文件夹中,能在npm环境之外全局调用

  3. 依赖项 版本号或者url

    • 版本号 详情
      1. 固定版本1.0.0
      2. 范围 >=1.0.2 <2.1.2 1.0.0 - 2.0.01与2之间 `
      3. 逻辑操作 1.1.1 || >1.2.1 1.1.1或者大于1.2.1
      4. 地址 http://asdf.com/asdf.tar.gz
      5. 最新 latest
      6. X-Ranges 1.2.x表示1.2开头的任意一个包 *任意版本
      7. 指定范围 ^1.1.11.x.x版本 ~1.1.1 1.1.x版本 ~1 1.x.x版本
      8. 带预发步标签 >1.1.1.alpha.1` 1.1.1.alpha.x x大于1版本
    • url格式<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]<protocol> git, git+ssh, git+http, git+https, or git+file
      1. git URL:

        • git+https://isaacs@github.com/npm/cli.git
        • git://github.com/npm/cli.git#v1.0.27
      2. file:

        • file:../foo/bar
      3. gitHub URLs:

        • mochajs/mocha#4727d357ea
    • peerDependencies 当npm i时候将不会安装进node_modules 当PackageBdependencies了PackageA时候

    如当前demo包dependencies了PackageA包会产生如下结构

    |- PackageB
         |- node_modules
             |- Demo
                 |- PackageA
             |- PackageA
    

    如当前demo包peerDependencies了PackageA包 在B包中安装demo包时将不会安装在demo包下需要手动安装a包产生如下结构

    |- PackageB
         |- node_modules
             |- Demo
             |- PackageA
    

2. npm install <package>

npm install会先检查,node_modules目录之中是否已经存在指定模块。如果存在,就不再重新安装 可以使用npm install <package> -f--force强制重新安装 其他命令

  • -g 全局安装
  • -S 安装写入dependencies
  • -D 安装写入devDependencies

3. npm update <package>

如果有最新版本会更新本地包

4. npm uninstall <package>

删除本地包

5. npm link <package>

链接到对应的全局包 使单个模块中依赖的包使用全局安装的包 可以使用在经常重复使用的包中也可以 链接自己的本地包

  1. 在需要共享的包package.json同级目录npm link根据package.json中name生成对应包
  2. 需要使用的地方 npm link <name>

6. npm run <command>

npm run会添加了node_modules/.bin环境路径 并且优先级最高。 npm run 自带钩子以npm run start为例

  • npm run prestart 在start前运行
  • npm run poststart 在start之后运行

7. 其他常用命令

  • v <package> 查看包版本信息
  • v <package> versions 查看包所有版本
  • ls 查看安装的版本
  • docs <package> 查看包文档