npm 入门教程(下)
package.json
文件,package-lock.json
文件将会自动生成。
你可以尝试一个这个特性。删除 node_modules
文件夹,重新运行 npm i
。新版本的 npm5 将会安装 v1.8.2 版本的 Underscore。(因为在 package-lock.json
指定了 Underscore 的版本为 1.8.2)。而旧版本的 npm 会安装 1.8.3 版本的 Underscore。之前的经验证明,版本不一致的依赖模块将会给开发者带来很大的麻烦,在之前,你需要手动创建一个 npm-shrinkwrap.json
文件来避免这个问题。
现在,假设 Underscore 的最新版本已经修复了我们之前遇到的 bug, 我们现在要更新 Underscore 至最新版本。
$ npm update underscore + underscore@1.8.3 updated 1 package in 0.236s $ npm list project@1.0.0 /home/sitepoint/project └── underscore@1.8.3
提示: 为了上述操作能生效,Underscore 必须位于
package.json
的 dependency 中。另外,如果你也很多过时的模块,可以执行npm update
命令一起更新所有模块。
搜索一个模块
你可以看到,这篇教程你我们已经多次使用了 mkdir
命令,那么是否有一个模块可以实现和 mkdir
一样的功能,我们有 npm search
试试看。
$ npm search mkdir NAME | DE ION | AUTHOR | DATE | VERSION mkdir | Directory crea… | =joehewitt | 2012-04-17 | 0.0.2 fs-extra | fs-extra conta… | =jprichardson… | 2017-05-04 | 3.0.1 mkdirp | Recursively mkdir,… | =substack | 2015-05-14 | 0.5.1 ...
我们找到了(mkdirp)。安装它。
$ npm install mkdirp + mkdirp@0.5.1 added 2 packages in 3.357s
现在我们创建一个 mkdir.js
文件,并且将以下代码复制进去。
const mkdirp = require('mkdirp'); mkdirp('foo', function (err) { if (err) console.error(err) else console.log('Directory created!') });
在命令行中运行这个文件
$ node mkdir.js Directory created!
重新安装所有的依赖模块
首先我们安装多个模块。
$ npm install request + request@2.81.0 added 54 packages in 15.92s
检查一下 package.json
文件
"dependencies": { "mkdirp": "^0.5.1", "request": "^2.81.0", "underscore": "^1.8.2" },
注意到,dependencies 列表也自动更新了。在之前的 npm 版本,只有执行 npm install request --save
命令才会将 dependency 保存到 package.json
文件中。如果你不想在 package.json
中保存,只需要使用 --no-save
参数。
假设你把你的工程文件拷贝到了另外一台机器上,并且我们想安装这些依赖。让我们先删除 node_modules
文件夹,然后执行 npm install
命令。
$ rm -R node-modules $ npm list project@1.0.0 /home/sitepoint/project ├── UNMET DEPENDENCY mkdirp@^0.5.1 ├── UNMET DEPENDENCY request@^2.81.0 └── UNMET DEPENDENCY underscore@^1.8.2 npm ERR! missing: mkdirp@^0.5.1, required by project@1.0.0 npm ERR! missing: request@^2.81.0, required by project@1.0.0 npm ERR! missing: underscore@^1.8.2, required by project@1.0.0 $ npm install added 57 packages in 1.595s
检查一下你的 node_modules
文件夹,你会发现所有的模块都已经重新安装了。通过这种方式,你可以很简单的与其他人分享你的工程文件,你只需给他们一个 package.json
文件,而不用把你的所有依赖模块给他们。
管理缓存
当你通过 npm 安装一个模块时,它会保存一份模块的副本,所以当你下次安装同样的模块的时候,npm 它不会访问网络,而是直接从你当前工作目录的 .npm
文件夹下读取缓存。
$ ls ~/.npm anonymous-cli-metrics.json _cacache _locks npm registry.npmjs.org
但是随着时间的推移,你的 .npm
文件夹会有很多夹杂许多旧的模块包,这时就很有必要定期清理一下你的 .npm
目录了。
$ npm cache clean
如果你的想清除你系统内有多个 node 工程,你也在你的工作目录下使用以下命令删除所有的 node_modules
文件夹。
find . -name "node_modules" -type d -exec rm -rf '{}' +
别名
你可能注意到了,这里有很多方式去执行我们的 npm 命令。这里有一个简单的 npm 别名的列表
npm i
– install local package 本地安装模块npm i -g
– install global package 全局安装模块npm un
– uninstall local package 卸载本地模块npm up
– npm update packages 更新本地模块npm t
– run tests 运行测试npm ls
– list installed modules 列出已安装的模块npm ll
ornpm la
– print additional package information while listing modules 打印出所列模块的附加信息
你也可以像这样一次安装多个模块
$ npm i express momemt lodash mongoose body-parser webpack
如果你想了解所有的 npm 命令,只需要运行 npm help
命令,或者你也可以读一读我们的这篇文章: 10 Tips and Tricks That Will Make You an npm Ninja.
版本管理工具
有很多的 Node.js 版本工具可供使用来管理你系统内的 Node.js 版本。比如说 n,或者nvm (Node Version Manager). 如果你对他们感兴趣,你应该读一下我这篇入门指南: Install Multiple Versions of Node.js using nvm.
结论
在这篇教程中,我介绍了 npm 的基本用法,包括如何安装 Node.js、如何改变全局模块的安装位置(这样我们可以避免使用 sudo
)、如果本地或者去全局安装 npm 模块、同时还介绍了怎么删除,升级模块,怎么安装一个指定版本的模块以及怎么管理你工程的各个依赖项。如果你想了解关于更多的 npm 最新版本的特性,你可以访问 npm 的 官方仓库。
npm5 给全世界前端开发带来了巨大的改进。其 COO 说,npm 的用户群在不断变化,大部分用户不仅仅为了写 Node 程序而使用 npm, npm 已经成为了前端整合 代码的工具,甚至是现代 不可或缺的一部分。如果你还没有在你的项目中使用 npm ,现在是时候了。