资讯专栏INFORMATION COLUMN

npm install 你很明白吗?

SnaiLiu / 443人阅读

摘要:你很明白吗依赖开发依赖当我们敲的时候会安装哪些依赖,和都会安装吗还是只安装项目依赖包是放在和简单问两个问题,勾起大家对,,的回忆。和还是有明显区别的。结论当你在开发一个包的时候,还是要好好管理你的依赖和依赖。

npm install 你很明白吗
dependencies 依赖
devDependencies 开发依赖

【当我们敲 npm install 的时候会安装哪些依赖,dependencies 和 devDependencies 都会安装吗?还是只安装 dependencies ?】
【项目依赖包是放在 dependencies 和 devDependencies ?】

简单问两个问题,勾起大家对 npm install,dependencies ,devDependencies 的回忆。

下面进入正文

npm install 也支持直接输入 Github 代码库地址

npm install git://github.com/package/path.git
npm install git://github.com/package/path.git#0.1.0

安装之前,npm install 会先检查,node_modules 目录之中是否已经存在指定模块。如果存在,就不再重新安装了,即使远程仓库已经有了一个新版本,也是如此。

如果你希望,一个模块不管是否安装过, npm 都要强制重新安装,可以使用 -f 或 --force 参数。

npm install  --force

npm install 的时候会安装哪个里面的依赖?dependencies 还是 devDependencies

【npm install 默认会安装 dependencies 字段和 devDependencies 字段中的所有模块】。 如果软件包具有 package-lock 或 shrinkwrap 文件,则依赖项的安装将由此驱动,如果两个文件都存在,则 npm-shrinkwrap.json 优先。 请参阅 package-lock.json 和 npm-shrinkwrap。

【ok,那么也就是说,当我们在拿到一个项目的时候,使用 npm install 是会安装 dependencies 和 devDependencies 里所有的依赖包的。】

那么是否意味着,我们在安装依赖包的时候,不需要过多的去纠结是使用 -S 还是 -D 呢 ?随便安装到 dependencies 或者 devDependencies 里都行,反正 npm install 的时候,都会安装 dependencies 和 devDependencies 里面的依赖。

其实不然!

如果使用 --production 参数,可以只安装 dependencies 字段的模块。

$ npm install --production
或者
$ NODE_ENV=production npm install

【所以,我们做好 dependencies 和 devDependencies 的区分的话,在使用 npm install --production 的时候,还是有区别的。】

不过,感觉这个 npm install --production 的使用场景不是很多。我好像没怎么用,可能以后会用到吧。

内心os:既然 npm install --production 我用不到,那我在安装依赖包的时候,还是随意吧,放到 dependencies 或者 devDependencies 都无所谓,反正 npm install 的时候会把 dependencies 和 devDependencies 里面的依赖包都安装下来。哈哈~~,随意使用 -S 或者 -D 咯~

错!
错!!
错!!!
这样想就错了。dependencies 和 devDependencies 还是有明显区别的。我们接着来看。

我们在安装依赖包的时候,要如何区分是安装到 dependencies 还是 devDependencies 中呢?

dependencies 依赖
这个可以说是我们 npm 核心一项内容,依赖管理,这个对象里面的内容就是我们这个项目所依赖的 js 模块包。下面这段代码表示我们依赖了 markdown-it 这个包,版本是 ^8.1.0 ,代表最小依赖版本是 8.1.0 ,如果这个包有更新,那么当我们使用 npm install 命令的时候,npm 会帮我们下载最新的包。当别人引用我们这个包的时候,包内的依赖包也会被下载下来。

"dependencies": {
    "markdown-it": "^8.1.0"
}

devDependencies 开发依赖
【在我们开发的时候会用到的一些包,只是在开发环境中需要用到,但是在别人引用我们包的时候,不会用到这些内容,放在 devDependencies 的包,在别人引用的时候不会被 npm 下载】。

"devDependencies": {
    "autoprefixer": "^6.4.0",0",
    "babel-preset-es2015": "^6.0.0",
    "babel-preset-stage-2": "^6.0.0",
    "babel-register": "^6.0.0",
    "webpack": "^1.13.2",
    "webpack-dev-middleware": "^1.8.3",
    "webpack-hot-middleware": "^2.12.2",
    "webpack-merge": "^0.14.1",
    "highlightjs": "^9.8.0"
}

当你有了一个完整的 package.json 文件的时候,就可以让人一眼看出来,这个模块的基本信息,和这个模块所需要依赖的包。我们可以通过 npm install 就可以很方便的下载好这个模块所需要的包。

结论:当你在开发一个 npm 包的时候,还是要好好管理你的 dependencies 依赖 和 devDependencies 依赖。 之前有个同事写了一个 loading 组件,发到 npm 上面去了,他跟我说简单好用,我就用了。但是我发现他这么小的一个组件,为什么包这么大。一看,原来他写这个 npm 包的时候,所有的依赖都放到 dependencies 里面了(包括 gulp,browser-asyc,压缩代码的,express…等等一些他开发时用的工具)。

你们说,他是不是挺狠的!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110232.html

相关文章

  • [译] Webpack 前端构建集成方案

    摘要:现在,让我们创建项目的入口,并使用然后创建我们的配置,文件名为,的配置文件是一个,并且需要成一个对象在这里,告诉那些文件是你应用的入口。代码分割便是用来解决之前所说的单集成模块不可维护的引用的问题。 构建工具逐渐成为前端工程必备的工具,Grunt、Gulp、Fis、Webpack等等,译者有幸使用过Fis、Gulp。前者是百度的集成化方案,提供了一整套前端构建方案,优点是基本帮你搞定了...

    lewif 评论0 收藏0
  • 你见过用命令行写的简历

    摘要:异步任务的核心是名称与任务名一致的函数,该函数接受两个参数一个函数和命令行的输入值。 废话:如果是不能给 hr 发这样的简历之类大家都懂的话,麻烦您就不要回复了,谢谢! 国际惯例: https://github.com/dongsuo/vu... 正文: 作为一名程序员,还是有一份有特色的在线简历会比较好吧……在线简历很容易做得很丑哎……套模板这种事情有点丢人呀……那……干嘛不用程序...

    zhou_you 评论0 收藏0
  • 5女孩:北京的你如此美丽。

    摘要:佳佳是我朋友里面最优秀的女孩之一,事业顺利,能力也十分拔尖,最近一直在安排移民加拿大的事宜。其实我已经准备了一年多,前前后后的,连我北京的房子都卖了。佳佳,就是那个非常勇敢的人。我笑了笑,也许未来她在北京要比温哥华美丽和快乐的多。 showImg(https://segmentfault.com/img/bV1Dr0?w=3500&h=1438); 你的能量,超出你想象!---红牛 忙...

    MarvinZhang 评论0 收藏0
  • 5女孩:北京的你如此美丽。

    摘要:佳佳是我朋友里面最优秀的女孩之一,事业顺利,能力也十分拔尖,最近一直在安排移民加拿大的事宜。其实我已经准备了一年多,前前后后的,连我北京的房子都卖了。佳佳,就是那个非常勇敢的人。我笑了笑,也许未来她在北京要比温哥华美丽和快乐的多。 showImg(https://segmentfault.com/img/bV1Dr0?w=3500&h=1438); 你的能量,超出你想象!---红牛 忙...

    icattlecoder 评论0 收藏0

发表评论

0条评论

SnaiLiu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<