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
安装远程项目模板
- 无name:交互式询问后创建一个package.json文件,可传
npm install <name>
(npm i)- 无name:安装package.json文件
dependencies
、devDependencies
中列出的依赖包 - 有name:本地没有则安装name包到本地,有则优先取package-lock.json文件中name包指定的版本号
- 无name:安装package.json文件
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": [], // 用于多包管理
}