06月17, 2016

我对npm的了解

前阵子把npm升级到npm3.x了。好像现在已经是3.9.x了,是不是再过一段时间要变4了。之所以更新npm3,是因为有些node工具包就规定了必须是npm3.x才行。我说一下对它的直观感觉吧。

个人感受

下载某个依赖库,明明就一个,但查看node_modules,好多的文件夹。瞬间就明白了npm3的扁平式设计。

扁平式设计,是基于高复用模块的考虑。

我个人觉得扁平式设计带来最大的好处,就是解决了windows上npm包目录太深的问题。我没记错的话,之前有个同事,有一个npm的模块安装不上,然后我把那个模块给他,他粘贴不进去,报错。后来才知道windows资源管理器能处理的路径长度有限(就跟URL是一样的)。

关于复制node_modules文件这一块,我的理解是,两台电脑都是32位(或64位),并且node、npm版本号相同的情况下,可以直接拷过去,不然拷过去,会有问题的。之所以提这个,是因为很多人都觉得重新npm install会觉得比较烦,很大一部分的原因是公司网速差,或者模块安装不上。

如何扁平化

npm3也不一定完全地做到了扁平化,或者使用npm2的情况下,可以用:

npm dedupe

来做到完全的扁平化,但也不是必须的

当npm uninstall的时候,npm3会帮我们删除该模块引用的模块(不为另外模块所引用的)。如果是npm2的话,同样可以用上面一条命令,做一下处理。

peer-dependencies

开始看到这个单词的时候,有些蒙。

查了一下google,翻到这篇文章,看了一下大致清楚多了。

就是为了解决某个插件所依赖的宿主版本问题。

package.json里面的scripts

{
  "name": "myTest",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
        "test": "",
    "start": "",
    "build": "",
    "dev": ""
  },
  "bin": {"myTest": "bin/index.js"},
  "keywords": [],
  "author": "",
  "license": "ISC"
}

我们可以通过npm run 某个指令(如上面的test、start等,即对象的key值),它会帮右边的值放到控制台进行运行。

当然上面的start和test,都可以直接缩写成:

npm test
npm start

理由是npm command里有一个常用列表

常用命令列表

这里有一个比较奇怪的是build,直接输入npm build,是什么结果都没有。

另外,像grunt/gulp这些,在执行的时候,建议用/node_modules/.bin/grunt来执行,好处主要在于:

  • grunt的版本不会和全局的有冲突
  • 使用人员,不需要全局安全grunt

npm的一些简写

譬如:

npm install -g 
npm install --save
npm install --save-dev

可以用以下简写来代替

npm i -g
npm i -S
npm i -D

哇,感觉瞬间轻松了好多。。。

结尾

package.json这个配置文件,还有很多黑魔法,有机会等我了解更多了,再写上来吧。

npm更详细的资料

本文链接:www.my-fe.pub/post/my-know-npm.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。