NPM实践


npm源问题:

package-lock.json文件中因他人本地 npm source 设置不同,导致官方源 https://registry.npmjs.org,混入了 taobao 源。Jenkins 发布不稳定、个别依赖包最新版本没有被 taobao 源支持,等等,都会导致导致 npm 构建失败。统一包来源的方法:

  • 删除 package-lock.json
  • 删除 node_modules 目录(即已安装的文件)
  • 运行 npm install

查看当前npm源

npm config get registry

npm脚本指令

npm-scripts

Additionally, arbitrary scripts can be executed by running npm run-script <stage>. Pre and post commands with matching names will be run for those as well (e.g. premyscript, myscript, postmyscript).

也就是说,如果你有一个 build 指令,当执行完 npm run build 后,可以自动执行 npm run postbuild

想要在构建完成之后,删除source map文件,可以通过在package.json中添加:

"postbuild": "rimraf ./build/**/*.js.map"

macOS升级npm

Node.js官方下载pkg文件安装的 Node.js 如何升级?

直接下载最新稳定版 pkg 文件根据指令安装即可。

重新打开 terminal,运行以下命令检查是否更新成功。

node -v // v12.14.1
npm -v  // 6.13.4

npx

从npm 5.2.0 开始,自动安装了npx。npx 主要用于命令行的寻址等辅助功能上,好处就是避免安装全局命令。

安装私有代码库指定版本依赖

使用git url作为dependencies官方文档

url格式参看文档:

git+ssh://git@github.com:npm/cli.git#v1.0.27
git+ssh://git@github.com:npm/cli#semver:^5.0
git+https://isaacs@github.com/npm/cli.git
git://github.com/npm/cli.git#v1.0.27

结合 Git commands文章里使用tag的内容,npm 将在远端仓库查找任何与指定的commit id关联的 tags 或 refs。如果url后面既没有 #<commit-ish> 也没有 #semver:<semver> 则使用 master 分支的代码。

Yarn

比起 npm,同样作为包管理工具的 Yarn 旨在提升性能和安全。Yarn 作为 npm 包,可以通过 npm install,但是其核心开发团队不建议这样做,按官方推荐安装。

使用:运行 yarn 命令,基于 package.json 的版本范围,自动生成或更新 yarn.lock 文件。其中包含:已安装的每一个单独依赖的确切 version、代码的checksums(用来判断代码是否一致的 integrity)、下载地址 resolved。

package.json 指定了依赖的版本范围,而依赖包随时都有可能更新,因此需要锁定单一版本。

yarn.lock 作为 lockfile 保证在任何系统(机器)上在 node_modules 里的依赖文件结构相同,能够阻止自动安装新的有 breaking change 的依赖。锁文件在 Yarn 第一版面世,npm5 随后(2017年5月)推出了 package-lock.json 来确保项目安装的依赖版本。

2020年1月推出的 Yarn2 评价不太好。

Yarn 的安装速度比 npm 块(npm6 稍微追赶上了一些)。生成确定的构建结果,使用 yarn.lock 结合指定版本的 Yarn 足够了。

每一个项目都应该提交lock文件,这篇文章从几个方面阐述了原因,现在已经是共识。

npm7

npm7采用了yarn.lock,同时也保留了package-lock.json官方 解释了为什么这样做。

package-lock.json 锁定结果 tree shape,提供确定可复制重现的 builds,还有一些额外的 metadata。而 yarn.lock 文件仅锁定 resolution,树构建合约被拆分到(取决于) Yarn.lock 文件和 Yarn 本身的实现(不同版本 Yarn 的算法不一致,其依靠算法保证结果 resolution 一致)

尽管 npm 使用 yarn.lock 文件作为可靠的信息源,但它并不将其视为权威的约束集。

npm link

开发 npm 模块本地调试和测试方法:

  1. 在开发的 npm 模块项目里,运行 npm link,mac 如果报 permission denied 在命令前加 sudo
  2. 进入运行/引用 npm 模块的项目,运行 npm link <npm模块项目名称>

耐心等待运行结束,可以看到 console 输出

/Users/CF/Documents/projects/wholee-msite/node_modules/cf-front-utils -> /usr/local/lib/node_modules/cf-front-utils -> /Users/CF/Documents/projects/cf-front-utils
  1. 调试完毕后,运行 npm unlink <npm模块项目名称> 解除链接

注意:

  • 确保 npm 模块和引入模块的项目运行在相同版本的 node 环境里
  • 修改模块代码后要重新 build
  • 模块代码更新后,项目里仍然加载的是旧代码,先 unlink,再重新 link

nvm

官方代码库

macOS 10.15以上默认shell是 zsh,而 nvm 会查找 .zshrc 去更新,但是这个文件默认是没有的。因此:

  1. touch ~/.zshrc
  2. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh bash
  3. 关闭终端,重新打开
  4. 检查是否已安装:command -v nvm

终端输出 nvm 表示安装成功。

查看已安装的 node 版本

nvm ls