npm使用参考这里
pip freeze和pip list区别在这里:
确实,使用“pip list”命令和“pip freeze”命令都可以实现列出本地安装的python包的功能;但是两者有本质上的区别:
pip list 命令(List installed packages, including editables.)
该命令是正儿八经地把python安装包给列出来。
pip freeze 命令(Output installed packages in requirements format.)
该命令的意思是把已安装的python包以requirements参数的格式输出。
啥叫“把已安装的python包以requirements参数的格式输出”?那就要好好说道说道“pip freeze命令的用法”了!
pip freeze命令主要是为了环境迁移的作用,比如当前主机配置好了,想一次性把当前主机已经安装的python包都记录下来,然后下次去新的机器就可以自动安装了,那就使用“pip freeze”命令把本地已经安装的python包给按照requirements参数(就是pip install -r 所需要的那个文件的内容格式)的格式输出成requirements.txt即可:
$ pip freeze | tee requirements.txt
上述命令“pip freeze | tee requirements.txt”中的“requirements.txt”这个名字是可以自定义的,叫阿猫阿狗都可以,比如可以叫“dog.txt”,那命令就是“pip freeze | tee dog.txt”;其实就是把终端屏幕输出的内容保存到指定名称的txt文件中。
之后把生成的这个txt文件送到新的主机上,使用“pip install -r 自定义名称的txt文件”命令即可根据自定义的python包安装列表来安装模块:
$ pip install -r requirements.txt
题外话:使用“pip list”输出的python包,似乎比使用“pip freeze”输出的python包多几个,确实是多几个;因为正常使用“pip freeze”命令输出的python包是不包括wheel、pip、distribute、setuptools这几个包的,python环境迁移一般不会涉及到这几个包,所以一般不包括。如果非要强行输出这几个包,如下所示添加“--all”参数即可:
$ pip freeze --all
【当我们敲 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…等等一些他开发时用的工具)。
一、npm install 命令简介
npm install packageName 命令
安装模块到项目node_modules目录下。
不会将模块依赖写入devDependencies或dependencies 节点。
运行 npm install 初始化项目时不会下载模块。
npm install -g packageName 命令
安装模块到全局,不会在项目node_modules目录中保存模块包。
不会将模块依赖写入devDependencies或dependencies 节点。
运行 npm install 初始化项目时不会下载模块。
npm install -save packageName 命令
安装模块到项目node_modules目录下。
会将模块依赖写入dependencies 节点。
运行 npm install 初始化项目时,会将模块下载到项目目录下。
运行npm install –production或者注明NODE_ENV变量值为production时,会自动下载模块到node_modules目录中(生产环境)。
- npm install -save-dev packageName 命令
安装模块到项目node_modules目录下。
会将模块依赖写入devDependencies 节点。
运行 npm install 初始化项目时,会将模块下载到项目目录下。
运行npm install –production或者注明NODE_ENV变量值为production时,不会自动下载模块到node_modules目录中(开发环境)
二、项目组规范
- npm install -g packageName
全局安装 适用场景未发现,后续补充
- npm install -save packageName
运行也需要依赖的包,比如jquery,或者 vue-router
运行完成以后,会在package.json中dependencies 节点有依赖,build时会打包发布出去。
- npm install -save-dev packageName
开发过程需要依赖的包,比如eslint,babel等,不会被发布出去。
安装参数详解
命令 解释
npm install module 安装某个module到本地项目的node_modules,但不会把安装包的信息添加到package.json文件
npm install module --save 安装某个module到本地项目的node_modules文件夹,同时把相关模块依赖添加到package.json文件的dependencies中
npm install module --save-dev 安装某个module到本地项目的node_modules文件夹,同时把相关模块依赖添加到package.json文件的devDependencies
npm install module -g 与npm install module一样,只是module的安装是全局的
npm install module --save -g 与npm install module --save一样,只是module的安装是全局的
npm install module --save-dev -g 与npm install module --save-dev一样,只是module的安装是全局的
package.json中dependencies与devDependencies区别
属性 | 区别 |
---|---|
dependencies | 这些包都是你的应用程序在生产环境中所需要的 |
devDependencies | 这些包只是在开发和测试中需要的 |