原文: http://www.sitepoint.com/beginners-guide-node-package-manager/
Installing Node.js
验证你的安装是否成功.
$ 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.
$ 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输出的是什么东西
$ npm config list
现在我们知道了全局位置.
$ npm config get prefix /usr/local
这个prefix就是我们想修改的, 为了全局package安装在我们的home目录下, 我们在home目录下创建一个新的文件夹
$ cd && mkdir .node_modules_global $ npm config set prefix=$HOME/.node_modules_global
简单的修改后, 全局package的目录已经修改好了. 现在在home目录下创建一个.npmrc文件.
$ npm config get prefix /home/sitepoint/.node_modules_global $ cat .npmrc prefix=/home/sitepoint/.node_modules_global
因为我们修改了全局package的安装位置我们需要重新安装npm, 这次我们会在新的位置安装
$ npm install npm --global npm@2.6.0 /home/sitepoint/.node_modules_global/lib/node_modules/npm
最后, 我们需要添加.node_modules_global/bin 到我们的$PATH环境变量
. 运行完下面的命令记得重启terminal.
export PATH="$HOME/.node_modules_global/bin:$PATH"
运行下面的命令看看现在npm安装在哪个目录, 安装的是哪个版本的npm.
$ which npm /home/sitepoint/.node_modules_global/bin/npm $ npm -v 2.6.0
(我就不修改目录了)
用全局模式安装package
目前位置我们只用全局模式安装了一个package那就是npm自己. 现在让我们用全局模式来安装uglifyjs. 我么使用 --global
flag, 他有一个缩写是 -g
.
$ 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命令查看安装了哪些全局包.
$ 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.
$ npm list -g --depth=0 ├── npm@2.1.11 └── uglify-js@2.4.16
我们可以使用我们刚安装的uglifyjs解析js. 下面的命令会 minify example.js
到 example.min.js
:
$ uglifyjs example.js -o example.min.js
用本地模式安装package
去除--global就是用本地模式安装package了. package会安装在你当前目录下的node_modules文件夹下. 现在在home目录下创建一个project目录
$ mkdir ~/project && cd ~/project $ npm install underscore underscore@1.8.2 node_modules/underscore $ ls node_modules $ ls node_modules underscore
列出安装了哪些本地package
$ npm list /home/sitepoint/project └── underscore@1.8.2
卸载本地package
npm是一个包管理器, 因此我们肯定也能使用它来卸载package:
$ npm uninstall underscore unbuild underscore@1.8.2 $ npm list /home/sitepoint/project └── (empty)
指定安装某个版本的package
在@后写版本好即可.
$ npm install underscore@1.7.0 underscore@1.7.0 node_modules/underscore $ npm list /home/sitepoint/project └── underscore@1.7.0
更新 Package
$ npm update underscore underscore@1.8.2 node_modules/underscore $ npm list /home/sitepoint/project └── underscore@1.8.2
搜索查找Packages
本文多次使用了 mkdir命令. 有没有一个node package能做同样的事情呢? 让我们找找
$ 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目录下.
$ ls ~/.npm npm registry.npmjs.org underscore ...
这个目录下的packagek可能有很多老的版本的package, 所以有的时候我们需要清理他们.
$ npm cache clean
管理Dependencies
手动安装依赖非常不明智, 我们可以在项目的根目录下使用package.json管理package. 可以使用npm init 创建package.json
$ 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的内容如下:
{ "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.
$ 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.
$ 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被更新了
:
"dependencies": { "mkdirp": "^0.5.0", "request": "^2.53.0", "underscore": "^1.8.2" }