Skip to content
导航

npm

npm 是随 node.js 一同安装的包管理器CLI工具。

一般是和node.js版本配套的,不需要单独管理和升级npm(尽管较老的npm版本会提示升级)。

常用命令

以下“远程”均指“当前 npm registry 配置的源”。

  • npm config (npm c)
    查看或修改npm配置项,国内常用于配置 registry 以通过镜像站加速 npm 包下载
  • npm exec
    像 npm run 一样,从本地安装或远程运行包的 bin 配置指定的文件
  • npm init <name>
    • 无name:交互式询问后创建一个package.json文件,可传 --yes/-y 省略交互
    • 有name:相当于执行 npx create-foo 安装远程项目模板
  • npm install <name> (npm i)
    • 无name:安装package.json文件dependenciesdevDependencies中列出的依赖包
    • 有name:本地没有则安装name包到本地,有则优先取package-lock.json文件中name包指定的版本号
  • npm link <name>
    • 无name:将当前目录的包链接到全局。便于本地开发调试npm包
    • 有name:从全局查找name包链接到当前目录,作为已安装的包
  • npm publish
    发布当前目录的包到远程
  • npm run-script <command>(npm run)
    运行package.json文件scripts中的脚本,npm还包含可省略run的脚本别名
    • npm start
    • npm test
    • npm stop
  • npm uninstall <name>
    • 无name:从本机卸载当前包名。几乎不会这么用
    • 有name:从当前包卸载指定name包
  • npm unpublish <name>
    • 无name:从远程取消发布当前包,依赖当前包的其他包安装会出问题
    • 有name:从远程取消发布name包,一般用name@version取消发布指定版本号,以便重复发布同个版本号
  • npm view <name>
    • 无name:从远程查看当前包名的信息
    • 有name:从远程查看name包的信息
  • npx
    npm exec 功能基本相似,但略有不同:npx 必须在参数之前设置所有标志和选项,否则视为被运行文件的标志和选项。

package.json

package.json 是一个配置文件,除了npm所用的配置外,一些npm包也会使用和访问 package.json 存放的自有配置(例如prettier、husky等)

npm包配置及意义:

js
{
  "name": "demo", //包名,url安全字符,总长度小于214个字符
  "version": "1.0.0", // 版本号
  "description": "", // 描述,影响 npm 检索
  "keywords": [], // 影响 npm 检索的关键字
  "homepae": "", // 项目主页的网址
  "bugs": { // 报告问题的联系方式。只提供url则不用对象,直接使用字符串
    "url": "",
    "email": ""
  }, 
  "license": "ISC", // 许可证类型,ISC表示无需许可任意使用,UNLICENSED表示不授权
  "author": "name <email> (url)", // 作者,缩写为字符串,也可以分开写为对象
  "maintainers": [], // 维护者列表,内容格式同上
  "funding": "", // 资助方式。url字符串、对象或对象数组
  "files": "['*']", // 发布包时包含的文件,优先级低于npm默认包含、忽略的文件
  "main": "index.js", // 入口文件,require、import时的入口,未设置默认为index.js
  "browser": "index.js", // 浏览器中使用时的入口文件
  "bin": { // 可执行文件,全局安装时会链接到环境变量中
    "demo": "path/to/demo" // 只有一项,且命令与文件名相同时,可简写配置对象为文件路径
  },
  "directories": {}, // CommonJS 包规范定义的字段{
  "repository": { // 说明存储库,方便贡献代码
    "type": "git",
    "url": "https://github.com/facebook/react.git",
    "directory": "packages/react-dom" // npm包不在仓库根目录时指定路径
  },
  "scripts": { // npm run 可执行的命令
    "hello": "echo \"hello\""
  },
  "config": { // 注册为环境变量 npm_package_config_xxx
    "xxx" : ""
  },
  "dependencies": {}, // 运行时依赖项
  "devDependencies": {}, // 开发依赖项,如测试工具、转译器等。使用此包时不会安装
  "peerDependencies": {}, // 对等依赖项,v6之前不会安装,v7开始会默认安装
  "peerDependenciesMeta": {}, // 为npm如何处理对等依赖项,例如标记为可选项
  "bundleDependencies": [ // 发布时捆绑打包的依赖项。也可为true,捆绑所有依赖项
    "packageName"
  ], 
  "optionalDependencies": {}, // 可选依赖项,默认同当前包安装,安装出错不影响
  "overrides": { // 重写依赖项的版本,用于处理历史版本的安全问题
    "bar": {
      "foo": "1.0.0"
    }, 
  },
  "engines": { // 指定依赖的程序版本,安装时不匹配则警告
    "node": ">=0.10.3 <15",
    "npm": ">=6"
  },
  "os": [ // 指定在、不在哪些操作系统运行,字符串同process.platform
    "darwin",
    "linux",
    "!win32"
  ],
  "cpu": [ // 指定在、不在特定CPU架构上运行,字符串同process.arch
    "x64",
    "ia32"
  ],
  "private": true, // 让 npm 拒绝发布此包
  "publishConfig": {}, // 覆盖发布时的 npm config 配置内容
  "workspaces": [], // 用于多包管理
}

参考资料