更好的使用 NPM :提示和技巧

10年服务1亿前端开发工程师

昨天在 css88.com 上发布了 NPM 一些有用的提示和技巧 文章,早上收到朋友的消息,推荐了这篇文章,增加了一些经常使用的 NPM 几个技巧。归纳起来就是: save-exact, npm ci, npm audit fix, npx, updtr, NVM_SYMLINK_CURRENT。

可重复的构建

问题:你的本地安装可能或将来与其他同事不同,即使在 CI(持续集成) 服务器上也是如此!

原因:版本范围有问题:"rxjs": "^6.2.2"

解决方案:在安装依赖项时使用 --save-exact 参数,使用 --save-exact 参数,会在 package.json 文件指定安装模块的确切版本,就是说版本号中的 ^ 会消失:

$ npm install --save-exact aDependency
# 简写:
$ npm i -E aDependency

更好的解决方案:总是 exact(确切版本),永远不要使用版本范围:

$ npm config set save-exact true

安装 package(包)

问题:使用 npm install 将尝试解决依赖关系图,可能会安装不同的版本(因为依赖项中声明的范围,即使你使用了 —save-exact 你也不能控制的),然后更新 package-lock.json ,即使你并不想这么做。

解决方案:使用 npm ci 仅读取 package-lock.json ,这么做的好处是:

  • 提升速度(在CI和本地)
  • 避免污染 package-lock.json
$ npm ci

npm ci 命令类似于 npm-install,但它旨在用于自动化环境,如测试平台,持续集成和部署。通过跳过某些面向用户的功能,它可以比常规的 npm 安装快得多。它也比常规安装更严格,它可以帮助捕获由大多数 npm 用户的增量安装的本地环境引起的错误或不一致。

使用 npm install 和使用的主要区别 npm ci 是:

  • 该项目必须有一个 package-lock.jsonnpm-shrinkwrap.json
  • 如果程序包锁中的依赖项与其中的依赖项不匹配 package.jsonnpm ci 则将退出并显示错误,而不是更新 package(包) 锁。
  • npm ci 只能一次安装整个项目:使用此命令无法添加单个依赖项。
  • 如果 node_modules 已经存在,它将在 npm ci 开始安装之前自动删除。
  • 它永远不会写入 package.json 或任何 package-locks :安装基本上是冻结的。

全局 package(包)

问题:使用全局包,比如 nest-cli,create-react-apps(等数百个包) ,会污染全局 node_modules

解决方案:npx 运行包而不安装它(但首先,尝试在 node_modules 中本地查找它)

#给 cleaver 传递参数的示例
$ npx cutver watch index.md

npx 命令(npm v5.2.0+ 可用),引入这个命令的目的是为了提升开发者使用包内提供的命令行工具的体验。

举个例子:使用 create-react-app 创建一个 react 项目。

老方法:

npm install -g create-react-app
create-react-app my-app

npx方式:

npx create-react-app my-app

这条命令会临时安装 create-react-app 包,命令完成后 create-react-app 会删掉,不会出现在 global 中。下次再执行,还是会重新临时安装。

安全性

问题:查找具有安全漏洞的 package(包)。

解决方案:使用内置的 npm auditnpm audit fix

如果 package(包) 存在安全漏洞,那么在 CI 中集成时会失败 。

另一个解决方案是使用Github和Gitlab的内置服务。

$ npm audit fix

更新 package(包)

问题:更新依赖项并找到破坏代码的依赖项是单调乏味的。

解决方案1(最佳):使用 updtr 更新一个依赖项,然后运行测试,然后重复

$ npx updtr

解决方案2:使用 npm-check 显示所有可更新 package(包) 的列表

$ npx npm-check -u

使用 npm-check 显示所有可更新 package(包) 的列表

工具中的当前 Node 版本

问题:配置 Node / Typescript 时,Node path(路径) 与版本有关

Node path(路径) 与版本有关

解决方案:如果使用 NVM 管理 Node.js 的安装,NVM 可以自动管理当前版本 Node 的符号链接。 NVM 会将 ~/.nvm/current 链接到实际的当前版本,例如 ~/.nvm/versions/node/v11.0.0 ,并在更改 Node 版本时重新创建链接(如果使用 NVM auto-use ZSH plugin,则会自动重新创建)。

# Put this in your .bashrc/.zshrc
$ export NVM_SYMLINK_CURRENT=true

关注 Github 发布

问题:收到有关版本的通知

解决方案1 :(更新:2018.12.02)Github 现在支持观察存储库的版本: 文档

解决方案2:Gitpunch.com 似乎解决了这个问题。 它可以跟随你所有的 Github stars项目和特定项目。

英文原文:http://www.tomsquest.com/blog/2018/10/better-npm-ing/ 在此基础上增加了一些解释。

赞(5) 打赏
未经允许不得转载:WEB前端开发 » 更好的使用 NPM :提示和技巧

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

前端开发相关广告投放 更专业 更精准

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏