问题:你的本地安装可能或将来与其他同事不同,即使在 CI(持续集成) 服务器上也是如此!
原因:版本范围有问题:"rxjs": "^6.2.2"
解决方案:在安装依赖项时使用 --save-exact
参数,使用 --save-exact
参数,会在 package.json 文件指定安装模块的确切版本,就是说版本号中的 ^
会消失:
bash 代码:
$ npm install --save-exact aDependency# 简写:$ npm i -E aDependency
更好的解决方案:总是 exact(确切版本),永远不要使用版本范围:
bash 代码:
$ npm config set save-exact true
问题:使用 npm install
将尝试解决依赖关系图,可能会安装不同的版本(因为依赖项中声明的范围,即使你使用了 —save-exact
你也不能控制的),然后更新 package-lock.json
,即使你并不想这么做。
解决方案:使用 npm ci
仅读取 package-lock.json
,这么做的好处是:
提升速度(在CI和本地)
避免污染 package-lock.json
bash 代码:
$ npm ci
npm ci
命令类似于 npm-install
,但它旨在用于自动化环境,如测试平台,持续集成和部署。通过跳过某些面向用户的功能,它可以比常规的 npm 安装快得多。它也比常规安装更严格,它可以帮助捕获由大多数 npm 用户的增量安装的本地环境引起的错误或不一致。
使用 npm install
和使用的主要区别 npm ci
是:
该项目必须有一个 package-lock.json
或 npm-shrinkwrap.json
。
如果程序包锁中的依赖项与其中的依赖项不匹配 package.json
,npm ci
则将退出并显示错误,而不是更新 package(包) 锁。
npm ci
只能一次安装整个项目:使用此命令无法添加单个依赖项。
如果 node_modules
已经存在,它将在 npm ci
开始安装之前自动删除。
它永远不会写入 package.json
或任何 package-locks :安装基本上是冻结的。
问题:使用全局包,比如 nest-cli,create-react-apps(等数百个包) ,会污染全局 node_modules
。
解决方案:npx
运行包而不安装它(但首先,尝试在 node_modules
中本地查找它)
bash 代码:
#给 cleaver 传递参数的示例$ npx cutver watch index.md
npx 命令(npm v5.2.0+ 可用),引入这个命令的目的是为了提升开发者使用包内提供的命令行工具的体验。
举个例子:使用 create-react-app
创建一个 react 项目。
老方法:
bash 代码:
npm install -g create-react-appcreate-react-app my-app
npx方式:
bash 代码:
npx create-react-app my-app
这条命令会临时安装 create-react-app
包,命令完成后 create-react-app
会删掉,不会出现在 global 中。下次再执行,还是会重新临时安装。
问题:查找具有安全漏洞的 package(包)。
解决方案:使用内置的 npm audit
和 npm audit fix
。
如果 package(包) 存在安全漏洞,那么在 CI 中集成时会失败 。
另一个解决方案是使用Github和Gitlab的内置服务。
bash 代码:
$ npm audit fix
问题:更新依赖项并找到破坏代码的依赖项是单调乏味的。
解决方案1(最佳):使用 updtr
更新一个依赖项,然后运行测试,然后重复
bash 代码:
$ npx updtr
解决方案2:使用 npm-check
显示所有可更新 package(包) 的列表
bash 代码:
$ npx npm-check -u
问题:配置 Node / Typescript 时,Node path(路径) 与版本有关
解决方案:如果使用 NVM 管理 Node.js 的安装,NVM 可以自动管理当前版本 Node 的符号链接。 NVM 会将 ~/.nvm/current
链接到实际的当前版本,例如 ~/.nvm/versions/node/v11.0.0
,并在更改 Node 版本时重新创建链接(如果使用 NVM auto-use ZSH plugin,则会自动重新创建)。
bash 代码:
# Put this in your .bashrc/.zshrc$ export NVM_SYMLINK_CURRENT=true
问题:收到有关版本的通知
解决方案1 :(更新:2018.12.02)Github 现在支持观察存储库的版本: 文档 。
解决方案2:Gitpunch.com 似乎解决了这个问题。 它可以跟随你所有的 Github stars项目和特定项目。
英文原文:http://www.tomsquest.com/blog/2018/10/better-npm-ing/ 在此基础上增加了一些解释。