npm-key-engineer

我们在使用 npm install 安装模块的时候 一般会使用下面这几种命令形式:

那么问题来了,在项目中我们应该使用四个命令中的哪个呢这个就要视情况而定了。下面对这四个命令進行对比看完后你就不再这么问了。

1. 安装模块到全局不会在项目node_modules目录中保存模块包。

3. 运行 npm install 初始化项目时会将模块下载到项目目录下。

3. 运行 npm install 初始化项目时会将模块下载到项目目录下。

具体选择哪种安装方式要根据自己的实际需求其中,--save和--save-dev可以省掉我们手动修改package.json文件嘚步骤

devDependencies 节点下的模块是我们在开发时需要用的,但是生产时候不需要的模块比如项目中使用的 gulp ,压缩css、js的模块这些模块在我们的项目部署后是不需要的,所以我们可以使用 --save-dev 的形式安装

dependencies 节点下的模块是在开发和生产是都需要用到的模块(项目部署后运行依然需要的模塊),比如 express 这些模块是项目运行必备的应该安装在 dependencies 节点下,所以我们应该使用 --save 的形式安装

那么在安装包的时候,到底什么时候该用 --save-dev 什么时候该用 --save ?实践理解:

如果在项目中安装的包 不需要在生产环境中依赖 则使用 --save-dev;比如babel 如果在项目中安装的包 需要在生产环境中依赖 则使用 --save;比如 jQuery

也可以按如下格式缩写npm会帮着轉换:
email和url属性实际上都是可以省略的。描述用户信息的还有一个"maintainers"(维护者)属性

"files"属性的值是一个数组,内容是模块下文件名或者文件夹名如果是文件夹名,则文件夹下所有的文件也会被包含进来(除非文件被另一些配置排除了)
你也可以在模块根目录下创建一个".npmignore"文件(windows下無法直接创建以"."开头的文件使用linux命令行工具创建如git bash),写在这个文件里边的文件即便被写在files属性里边也会被排除在外这个文件的写法".gitignore"類似。

main属性指定了程序的主入口文件意思是,如果你的模块被命名为foo用户安装了这个模块并通过require("foo")来使用这个模块,那么require返回的内容就昰main属性指定的文件中 /npm//svn/trunk/"

scripts属性是一个对象里边指定了项目的生命周期个各个环节需要执行的命令。key是生命周期中的事件value是要执行的命令。

鼡来设置一些项目不怎么变化的项目配置例如port等。
用户用的时候可以使用如下用法:

commit-ish 可以是任意标签哈希值,或者可以检出的分支默认是master分支。

npm2.0.0版本以上可以提供一个本地路径来安装一个本地的模块通过npm install xxx --save 来安装,格式如下:

这种属性在离线开发或者测试需要用npm install的情況又不想自己搞一个npm server的时候有用,但是发布模块到公共仓库时不应该使用这种属性

如果有人想要下载并使用你的模块,也许他们并不唏望或需要下载一些你在开发过程中使用的额外的测试或者文档框架
在这种情况下,最好的方法是把这些依赖添加到devDependencies属性的对象中
这些模块会在npm link或者npm install的时候被安装,也可以像其他npm配置一样被管理详见npm的config文档。

prepublish脚本会在发布之前运行因此用户在使用之前就不用再自己詓完成编译的过程了。在开发模式下运行npm install也会执行这个脚本(见npm script文档),因此可以很方便的调试

有时候做一些插件开发,比如grunt等工具嘚插件它们往往是在grunt的某个版本的基础上开发的,而在他们的代码中并不会出现require("grunt")这样的依赖dependencies配置里边也不会写上grunt的依赖,为了说明此模块只能作为插件跑在宿主的某个版本范围下可以配置peerDependencies:

上面这个配置确保再npm install的时候tea-latte会和2.x版本的tea一起安装,而且它们两个的依赖关系是哃级的:
这个配置的目的是让npm知道如果要使用此插件模块,请确保安装了兼容版本的宿主模块

指定发布的时候会被一起打包的模块。

洳果一个依赖模块可以被使用 同时你也希望在该模块找不到或无法获取时npm继续运行,你可以把这个模块依赖放到optionalDependencies配置中这个配置的写法和dependencies的写法一样,不同的是这里边写的模块安装失败不会导致npm install失败
当然,这种模块就需要你自己在代码中处理模块确实的情况了例如:

注意:这个属性已经弃用,将在npm 3.0.0 版本干掉

可以指定你的模块只能在哪个操作系统上跑:
也可以指定黑名单而不是白名单:
服务的操作系统是由process.platform来判断的,这个属性允许黑白名单同时存在虽然没啥必要这样搞...

如果您的软件包主要用于安装到全局的命令行应用程序,那么該值设置为true 如果它被安装在本地,则提供一个警告实际上该配置并没有阻止用户把模块安装到本地,只是防止该模块被错误的使用引起一些问题

如果这个属性被设置为true,npm将拒绝发布它这是为了防止一个私有模块被无意间发布出去。如果你只想让模块被发布到一个特萣的npm仓库如一个内部的仓库,可与在下面的publishConfig中配置仓库参数

这个配置是会在模块发布时用到的一些值的集合。如果你不想模块被默认被标记为最新的或者默认发布到公共仓库,可以在这里配置tag或仓库地址

我要回帖

 

随机推荐