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 <packageName> --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…等等一些他开辟时用的东西)。
你们说,他是不是是挺狠的!