卢纳黍的想疗院


一个不务正业,爱纹身、爱金属乐、玩乐队、Bug制造专业的前端程序猿~


npm入门

npm入门

原文:https://zhuanlan.zhihu.com/p/27539908

npm是每一位前端工程师都必须具备技能,本文结合最新的npm v5讲解npm使用方法,因本人使用windows系统,而原作使用mac系统,所以在命令不同时,会特意提出。
npm可以在局部或全局范围内安装包,在局部范围内,包会安装到根目录下node_modules文件夹下面,属于当前用户的。全局范围的包会安装在{prefix}/lib/node_modules/下,{prefix}通常是/usr/或/usr/local。

改变全局范围下包的位置

npm config可以输出安装信息

$ npm config list; cli configs
user-agent = "npm/3.10.10 node/v6.10.3 linux x64"; 
userconfig /home/sitepoint/.npmrc
prefix = "/home/sitepoint/.node_modules_global"; 
node bin location = /usr/bin/nodejs; 
cwd = /home/sitepoint; 
HOME = /home/sitepoint; 
"npm config ls -l" to show all defaults.

获取当前全局下地址

$ npm config get prefix
/usr

想要更改这个prefix,以至于以后安装到我们自定义的目录下,所以创建了新的文件夹

$ cd ~ && mkdir .node_modules_global
$ npm config set prefix=$HOME/.node_modules_global

上面代码已经更改了地址了,还需要在创建一个.npmrc文件

$ npm config get prefix
/home/sitepoint/.node_modules_global
$ cat .npmrc
prefix=/home/sitepoint/.node_modules_global

因为我们更改了地址了,所以需要在更改后的地址下重新安装npm。

$ npm install npm --global
└─┬ npm@5.0.2
├── abbrev@1.1.0
├── ansi-regex@2.1.1
....
├── wrappy@1.0.2
└── write-file-atomic@2.1.0

最终,需要添加.node_modules_global/bin到$PATH环境变量下,以便在命令行下可以使用全局包,然后添加下面语句到.profile、.bash_profile或.bashrc并重启终端(此操作针对mac和Linux系统)。

export PATH="$HOME/.node_modules_global/bin:$PATH"

现在能发现路径.node_modules_global/bin,而且npm已经能使用

$ which npm
/home/sitepoint/.node_modules_global/bin/npm
$ npm --version\n5.0.2

全局模式下安装包

现在在全局路径下只有npm一个包,所以体验一下安装包的过程,下面我们安装压缩js的包UglifyJS,使用--global标签,也可以使用-g。

$ npm install uglify-js --global
/home/sitepoint/.node_modules_global/bin/uglifyjs -> /home/sitepoint/.node_modules_global/lib/node_modules/uglify-js/bin/uglifyjs
+ uglify-js@3.0.15
added 4 packages in 5.836s

从结果可以看出,包已经安装完成

罗列全局路径下的包

使用npm list可以查看全局路径下的所有包

$ npm list --global
home/sitepoint/.node_modules_global/lib
├─┬ npm@5.0.2
│ ├── abbrev@1.1.0
│ ├── ansi-regex@2.1.1
│ ├── ansicolors@0.3.2
│ ├── ansistyles@0.1.3
....................
└─┬ uglify-js@3.0.15
├─┬ commander@2.9.0
│ └── graceful-readlink@1.0.1
└── source-map@0.5.6

也可以使用--depth=0来缩短返回的结果

$ npm list -g --depth=0
/home/sitepoint/.node_modules_global/lib
├── npm@5.0.2
└── uglify-js@3.0.15

全局路径下的包在命令行中可以使用,

$ uglifyjs example.js -o example.min.js

删除本地包

npm是包管理器,所以当然也能删除包。

$ npm uninstall underscore
removed 2 packages in 0.107s
$ npm list
project@1.0.0 /home/sitepoint/project
└── (empty)

安装特定版本的包

现在我们可以安装我们所想要版本的包,使用@加上版本号即可。

$ npm install underscore@1.8.2
+ underscore@1.8.2
added 1 package in 1.574s
$ npm list
project@1.0.0 /home/sitepoint/project
└── underscore@1.8.2

更新包

首先先检查包是否有更新

$ npm outdated
Package     Current  Wanted  Latest  Location
underscore    1.8.2   1.8.3   1.8.3  project

Current代表你已经安装的包版本,Latest为最新的版本,Wanted为在不破坏现有代码情况下,可以更新到的版本号。

npm v5中新增了package-lock.json,其目的是确保在所有主机上安装同样的依赖库。无论是是在node_modules目录或package.json文件修改依赖树,都会自动记录下来。

可以删除node_modules目录,然后再运行npm i,依然会安装Underscore v1.8.2,早期的npm会安装到最新版,但是最新的v5版本npm却不会。这样就不用在像早期使用npm-shrinkewrap.json来解决。

但是如果有了package-lock.json,再运行npm shrinkwrap,会把pakcage-lock.json重命名为npm-shrinkewrap.json,可以看出 把npm-shrinkwrap.json 作为了默认创建,这是因为为了向下兼容之前使用npm-shrinkwrap.json的项目。

现在让我们更新包

$ npm update underscore
+ underscore@1.8.3
updated 1 package in 0.236s

$ npm list\nproject@1.0.0 /home/sitepoint/project
└── underscore@1.8.3

也可以直接使用npm update更新多个已经过期的包

寻找包\n寻找包使用npm search命令

$ npm search mkdir
NAME      | DESCRIPTION          | 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
...

管理缓存

npm安装包时会保存副本,这样下次再安装时,就不需要连网,缓存存储在默认用户目录下的.npm文件夹(windows系统会存储在npm-cache文件夹)

$ ls ~/.npm
anonymous-cli-metrics.json  _cacache  _locks  npm  registry.npmjs.org
可以使用下面命令,偶尔清楚一下缓存:

$ npm cache clean

别名

  • npm i – 安装包
  • npm i -g – 安装包到全局下
  • npm un – 删除本地下包
  • npm up – 更新包
  • npm t – 运行测试
  • npm ls – 罗列已经安装包
  • npm ll or npm la – 罗列包时显示额外信息
  • 也可以一次安装多个包
$ npm i express momemt lodash mongoose body-parser webpack
如果想知道其余npm命令,可以运行npm help

版本管理器

版本管理器可以在一台主机上控制多个版本的node,比如n,nvm

建议打赏金额1-10元

支付宝打赏

微信打赏

最近的文章

如何免费搭建一个属于自己的博客

\n\n 必备工具:\n\n coding 或者 github (这将是你博客的服务器)\n Hexo 或者 jekyll (这是你博客的系统,当然还有很多别的 可以自行百度/谷歌 :“…

Hexo, Coding, github 继续阅读
更早的文章

伪3D全景H5(类淘宝造物节邀请函)

占坑,慢慢填 Plugins: css3d-engine: https://github.com/shrekshrek/css3d-engine orienter: https://github.co…

3D, 全景 继续阅读
comments powered by Disqus