[译]A Beginner’s Guide to npm — the Node Package Manager
原文: http://www.sitepoint.com/beginners-guide-node-package-manager/
Installing Node.js
验证你的安装是否成功.
1 2 3 4 5 6 7 8 9 10 11 | $ node > console.log( 'Node is running' ); Node is running > .help . break Sometimes you get stuck, this gets you out .clear Alias for . break .exit Exit the repl .help Show repl options .load Load JS from a file into the REPL session .save Save all evaluated commands in this REPL session to a file > .exit |
Node已经安装成功了, 现在看看npm是否安装成功, 安装的是哪个版本的npm.
1 2 | $ npm -v 1.4.28 |
(我的是)
Node Packaged Modules
npm安装packages分为本地和全局两种模式. 在本地模式下安装会将package安装在你当前目录下的node_modules目录下. 用全局模式安装会安装到{prefix}/lib/node_modules/
文件夹下({prefix}
通常是/usr/
或者 /usr/local
). 这意味这你可能需要使用sudo来安装全局package.
修改全局package的安装目录
看看npm config输出的是什么东西
1 | $ npm config list |
现在我们知道了全局位置.
1 2 | $ npm config get prefix /usr/local |
这个prefix就是我们想修改的, 为了全局package安装在我们的home目录下, 我们在home目录下创建一个新的文件夹
1 2 | $ cd && mkdir .node_modules_global $ npm config set prefix=$HOME/.node_modules_global |
简单的修改后, 全局package的目录已经修改好了. 现在在home目录下创建一个.npmrc文件.
1 2 3 4 | $ npm config get prefix /home/sitepoint/.node_modules_global $ cat .npmrc prefix=/home/sitepoint/.node_modules_global |
因为我们修改了全局package的安装位置我们需要重新安装npm, 这次我们会在新的位置安装
1 2 | $ npm install npm --global npm@2.6.0 /home/sitepoint/.node_modules_global/lib/node_modules/npm |
最后, 我们需要添加.node_modules_global/bin 到我们的$PATH环境变量
. 运行完下面的命令记得重启terminal.
1 | export PATH= "$HOME/.node_modules_global/bin:$PATH" |
运行下面的命令看看现在npm安装在哪个目录, 安装的是哪个版本的npm.
1 2 3 4 | $ which npm /home/sitepoint/.node_modules_global/bin/npm $ npm -v 2.6.0 |
(我就不修改目录了)
用全局模式安装package
目前位置我们只用全局模式安装了一个package那就是npm自己. 现在让我们用全局模式来安装uglifyjs. 我么使用 --global
flag, 他有一个缩写是 -g
.
1 2 3 4 5 6 | $ npm install uglify-js --global uglify-js@2.4.16 node_modules/uglify-js ├── uglify-to-browserify@1.0.2 ├── async@0.2.10 ├── optimist@0.3.7 (wordwrap@0.0.2) └── source-map@0.1.34 (amdefine@0.1.0) |
通过输出你能看出另外4个package也被安装了 – 这是因为uglify-js依赖于这4个package.
看看都安装了哪些全局package
使用npm list命令查看安装了哪些全局包.
1 2 3 4 5 6 7 8 9 10 11 12 | $ npm list --global ├─┬ npm@2.6.0 │ ├── abbrev@1.0.5 │ ├── ansi@0.3.0 .................... └─┬ uglify-js@2.4.16 ├── async@0.2.10 ├─┬ optimist@0.3.7 │ └── wordwrap@0.0.2 ├─┬ source-map@0.1.34 │ └── amdefine@0.1.0 └── uglify-to-browserify@1.0.2 |
这个输出的内容非常的多, 他把我们安装package的依赖package也输出了. 我们可以使用--depth=0.
1 2 3 | $ npm list -g --depth=0 ├── npm@2.1.11 └── uglify-js@2.4.16 |
我们可以使用我们刚安装的uglifyjs解析js. 下面的命令会 minify example.js
到 example.min.js
:
1 | $ uglifyjs example.js -o example.min.js |
用本地模式安装package
去除--global就是用本地模式安装package了. package会安装在你当前目录下的node_modules文件夹下. 现在在home目录下创建一个project目录
1 2 3 4 5 6 7 | $ mkdir ~/project && cd ~/project $ npm install underscore underscore@1.8.2 node_modules/underscore $ ls node_modules $ ls node_modules underscore |
列出安装了哪些本地package
1 2 3 | $ npm list /home/sitepoint/project └── underscore@1.8.2 |
卸载本地package
npm是一个包管理器, 因此我们肯定也能使用它来卸载package:
1 2 3 4 5 | $ npm uninstall underscore unbuild underscore@1.8.2 $ npm list /home/sitepoint/project └── (empty) |
指定安装某个版本的package
在@后写版本好即可.
1 2 3 4 5 | $ npm install underscore@1.7.0 underscore@1.7.0 node_modules/underscore $ npm list /home/sitepoint/project └── underscore@1.7.0 |
更新 Package
1 2 3 4 5 | $ npm update underscore underscore@1.8.2 node_modules/underscore $ npm list /home/sitepoint/project └── underscore@1.8.2 |
搜索查找Packages
本文多次使用了 mkdir命令. 有没有一个node package能做同样的事情呢? 让我们找找
1 2 3 | $ npm search mkdir npm WARN Building the local index for the first time, please be patient mkdirp |
管理Cache
当npm安装一个package时它会自动保留一个copy, 这样下次你想安装这个package的时候, 它不需要去网上下载了, 直接去拿这个copy就好了. 这些copy都缓存在home目录下的.npm目录下.
1 2 | $ ls ~/.npm npm registry.npmjs.org underscore ... |
这个目录下的packagek可能有很多老的版本的package, 所以有的时候我们需要清理他们.
1 | $ npm cache clean |
管理Dependencies
手动安装依赖非常不明智, 我们可以在项目的根目录下使用package.json管理package. 可以使用npm init 创建package.json
1 2 3 4 5 6 7 8 9 10 11 12 | $ npm init This utility will walk you through creating a package .json file. Press ^C at any time to quit. name: (project) demo version: (1.0.0) description: Demo of package .json entry point: (main.js) test command: git repository: keywords: author: Sitepoint license: (ISC) |
package.json的内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | { "name" : "demo" , "version" : "1.0.0" , "description" : "Demo package.json" , "main" : "main.js" , "dependencies" : { "mkdirp" : "^0.5.0" , "underscore" : "^1.8.2" }, "devDependencies" : {}, "scripts" : { "test" : "echo \"Error: no test specified\" && exit 1" }, "author" : "Sitepoint" , "license" : "ISC" } |
可以添加private: true
避免在运行npm installl 时出现的一些警告. 创建一个新目录使用package.json安装我们的dependencies.
1 2 3 4 5 6 7 8 | $ mkdir ~/demo && cd ~/demo $ cp ~/project/ package .json ~/demo $ npm install $ npm list demo@1.0.0 /home/sitepoint/demo ├─┬ mkdirp@0.5.0 │ └── minimist@0.0.8 └── underscore@1.8.2 |
看看, 在另一个目录基于之前的package.json文件安装package很容易吧. 当我们安装新的package的时候, 怎样让他反映到package.json中去呢? 我们可以使用--save.
1 2 3 4 5 6 | $ npm install request --save $ npm list --depth=0 demo@1.0.0 /home/sitepoint/demo ├── mkdirp@0.5.0 ├── request@2.53.0 └── underscore@1.8.2 |
package.json被更新了
:
1 2 3 4 5 | "dependencies" : { "mkdirp" : "^0.5.0" , "request" : "^2.53.0" , "underscore" : "^1.8.2" } |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步