1. 可以选择关闭 npm 安装包的进度条

      npm 的操作进度条显示是非常耗时的,在某些情况下,有超过 50% 的时间在更新用户界面。我么可以设置进度条的环境变量为 false。

    ➜ ~ npm set progress = false

    1. 通过快捷方式生成 npm 包或者一个 git 项目

      使用 npm init -y 生成一个默认的包,包含最基本的信息。

    ➜ ~ npm set progress = false

    1. 列出所有安装的包并且可以展示其依赖,使用 - -depth=0 限制依赖树的深度。

    ➜ ~ /npm ls - -depth=0

    1. 查看有过期的包,选择需要更新的包升级。

    ➜ ~ npm outdated -l
    ➜ ~ npm outdated react

    1. 快速通过浏览器导航到包文档。
    • 快速找到并打开 github/gitlab 仓库地址或者是其他网址
      ➜ ~ npm repo react
    • 导航到包的文档或者首页
      ➜ ~ npm docs react
      ➜ ~ npm home react
    • 导航到包的 issues 或者未解决问题的分类。
      ➜ ~ npm bug react
    1. 查阅一个包含有价值的信息,出现实最新的 beta 和稳定版本,以及分布的信息格式和维护者。

    ➜ ~ npm view react / npm v react

    1. NPM npm view react
    2. react@17.0.1 | MIT | deps: 2 | versions: 352
    3. React is a JavaScript library for building user interfaces.
    4. https://reactjs.org/
    5. dist
    6. .tarball: https://registry.npm.taobao.org/react/download/react-17.0.1.tgz
    7. .shasum: 6e0600416bd57574e3f86d92edba3d9008726127
    8. dependencies:
    9. loose-envify: ^1.1.0 object-assign: ^4.1.1
    10. maintainers:
    11. - acdlite <npm@andrewclark.io>
    12. - brianvaughn <briandavidvaughn@gmail.com>
    13. - fb <opensource+npm@fb.com>
    14. - gaearon <dan.abramov@gmail.com>
    15. - lunaruan <lunaris.ruan@gmail.com>
    16. - sebmarkbage <sebastian@calyptus.eu>
    17. - sophiebits <npm2@sophiebits.com>
    18. - trueadm <dg@domgan.com>
    19. dist-tags:
    20. experimental: 0.0.0-experimental-00d4f95c2 next: 0.0.0-00d4f95c2
    21. latest: 17.0.1 untagged: 16.14.0
    22. published 4 months ago by gaearon <dan.abramov@gmail.com>

    ➜ NPM npm view react
    当然可以使用 npm v react versions 只查看 react 发布的历史版本号。

    1. npm 添加自动补全/查找功能, tab 键激活。

    ➜ ~ npm completion >> ~/.bashrc
    ➜ ~ source ~/.bashrc

    1. 项目中链接本地的一个包,开发调试非常有效。

    ➜ ~ git clone
    ➜ ~ cd
    ➜ ~ npm link
    ➜ ~ cd ../project
    ➜ ~ npm link

    1. 安装明确版本号的一个包。

    ➜ ~ npm i react@17.0.1

    1. 展示所有的 npm 设置项目,可以结合下面场景使用。

    ➜ ~ npm run env | grep npm_

    1. 可以创建自定配置的变量
    1. "config": {
    2. "build_folder":"./dist"
    3. }


    然后在 scripts 命令中使用它,维护一些私有或者公共变量非常方便。

    1. "scripts": {
    2. "build": "gulp build --dist $npm_package_
    3. config_build_folder"
    4. }


    或者

    1. "scripts": {
    2. "echo-str": "echo $npm_packag_str",
    3. "write-str": "npm run echo-str $npm_packag_str_input >> test.txt"
    4. }


    然后运行 write-str 命令,会出现下面的结果

    1. **➜ ~** npm run write-str 这是一个输入测试
    2. > byrobot-front@2.9.0 write-str /Users/fanduanduan/WorkSpace/gitlab.indata.cc/byfe/byrobot-front
    3. > npm run echo-str $npm_packag_str_input >> test.txt "这是一个输入测试"
    4. // 会生成如下 test.txt 文件
    5. > byrobot-front@2.9.0 echo-str /Users/fanduanduan/WorkSpace/gitlab.indata.cc/byfe/byrobot-front
    6. > echo $npm_packag_str "这是一个输入测试"
    7. 这是一个输入测试


    1. 是用 npx 运行脚手架,npx 会自动查找当前依赖包中是否有可执行文件 ,如果找不到,就回去环境变量中的 PATH 中查找。如果再找不到,就会帮你安装它。

    ➜ ~ npx create-react-app my-app

    1. 从不同的源地址安装包
    • 从特定的一个源安装组件,也可以是私有的源
      ➜ ~ npm config set @byai https://npm.byai.com
      ➜ ~ npm i @byai/ajax
    • 用户无感知的安装
    1. // 在执行 npm install 命令前,npm 会自动执行 npm preinstall 钩子
    2. "scripts": {
    3. "preinstall": "node ./bin/preinstall.js"
    • 配置 ./bin/preinstall.js
    1. const { exec } = require('child_process');
    2. exec('npm config get registry', function(error, stdout, stderr) {
    3. if (!stdout.toString().match(/registry\.x\.com/)) {
    4. exec(' npm config set @xscope:registry https://xxx.com/npm/');
    5. }
    6. });
    • 重新安装全部依赖包,可以使用一下命令,它通常用于我们的发布环境上,需要重新安装包的情况下。
      ➜ ~ npm ci
      它与 npm install 在以下方面不同:
      • 它会根据 package-lock.json 安装依赖包,这可以保证整个开发团队都使用版本完全一致的依赖,避免把时间浪费在排查因为依赖不一致而导致的各种奇怪问题上
      • 它会安装 package-lock.json 文件中提到的软件包的确切版本,无需计算求解依赖满足问题,在大多数情况下都可以大大加速 node 模块安装过程
      • 它会先删除项目中现有的 node_modules ,然后全新安装
      • 它不会写入 package.json 或任何包锁:安装基本上是冻结的
      • npm install 可以安装单个依赖包,npm ci 只能一次安装整个项目所以依赖包,无法安装单个依赖包


    另外,如果 package-lock.json 过时(和 package.json 冲突),那么 npm ci 会很贴心地报错,避免项目依赖陷入过时状态。
    注意: 如果你使用 npm ci,别忘了把 package-lock.json 加入 git 仓库。

    1. 删除重复的包

      我们可以 dedupe 命令删除重复的包,并在多个从属于包之间有效的功效依赖项目,简化了总体结构。因此形成一个平面且具有重复依赖的树。

    ➜ ~ npm dedupe
    ➜ ~ npm ddp

    1. 扫描应用中包存在的漏洞,并尝试修复它们

    ➜ ~ npm audit fix

    1. 查看当前 npm 运行的环境

    会展示 node,npm,registry 等关键信息
    ➜ ~ npm docker

    1. NPM npm doctor
    2. npm notice PING https://registry.npm.taobao.org/
    3. Check Value Recommendation
    4. npm ping ok
    5. npm -v v6.14.6 Use npm v7.6.3
    6. node -v v12.18.3 Use node v14.16.0
    7. npm config get registry https://registry.npm.taobao.org/ Try `npm config set registry https://registry.npmjs.org/`
    8. which git /usr/bin/git
    9. Perms check on cached files ok
    10. Perms check on global node_modules ok
    11. Perms check on local node_modules ok
    12. Verify cache contents verified 23347 tarballs

    参考文章:
    https://www.creativebloq.com/how-to/21-ways-to-improve-productivity-with-npm
    https://github.com/sisterAn/blog/issues/75