nodejs这些年的发展很是快,相信没有哪一个前端不知道的了,npm也成为了前端开发中常常用到了的一个命令。那么npm不是只用一个 "npm install xxx"命令就够了吗?实际上并非这样,发现有些团队在使用npm的时候没有认真去搞懂npm在团队里面或者说是在项目里面的一些用法。前端
在团队里面开发,通常会分为开发模式和生产模式(可能会有不一样的叫法),有时候还有测试模式,那么这些模式其实跟npm有很大的联系的。首先看一个简单的例子,先从npm依赖的package.json文件开始。node
{ "name": "test", "version": "1.0.0", "description": "test", "main": "app.js", "scripts": { "dev": "gulp dev && node app", "pro": "node app" }, "keywords": [ "test" ], "dependencies": { "koa": "^1.2.0" }, "devDependencies": { "gulp": "^3.9.1", "koa": "^1.2.0" }, "author": "test", "license": "MIT" }
这个很简单的package.json写法的例子,这里主要应用的是其中的 scripts、dependencies、devDependencies 这三个设置。git
关于这个两个配置,大体能够理解为当执行shell
npm install xxx --save
的时候,模块会记录在dependencies里面;
当执行npm
npm install xxx --save-dev
的时候,模块会记录在devDependencies里面。可是有一点的是,不少人在git clone 项目以后都是直接执行" npm i" 或者 "npm install" 就能够把项目的依赖配置好了,而这两个命令都是安装devDependencies里面的模块,那么还须要dependencies来作什么?
"npm install" 模式的是开发模式,因此安装模块是devDependencies里面的模块,在开发的时候确实够用了,可是在部署到服务器的时候就不是这样了。上面的package.json,dependencies(对应生产模式)和 devDependencies(对应开发模式),区别只是在于有没有 gulp 这个模块。
如今反过来想,咱们在开发的时候须要用gulp来打包咱们的静态文件,那么到了生产模式,也就是部署到了服务器,咱们已经不须要gulp来打包了,由于在开发模式把文件打包好,提交代码的时候同步就能够了,因此在部署到服务器的时候咱们彻底不用多安装gulp这么一个模块了。
那么生产模式是怎么执行安装呢?很简单,json
npm install --production
就能够了。这个例子为了理解,只是用了一两个模块,实际项目中生产模式和开发模式确定不止区别一个模块这么简单,这个时候就更能体现出两种模式分开的必要。
还要提过的测试模式,测试模式通常是归于开发模式,即把测试模式须要用到的模块放到devDependencies 里面,目前npm是尚未独立出来测试模式的依赖设置。gulp
大部分人开始开发的时候,对于gulp的构建通常就执行服务器
gulp
这个命令,对于运行node的server通常运行app
node app
这样相似的命令,可是这样在团队里面的开发是不规范的,特别是有些命令加上各类参数,而后比较长的时候就会麻烦了,应该是使用"npm run" 命令和结合scripts的设置。
scripts是一个object,那么key就是对应的命令,value就是实际上执行的命令,这种命令再长也不怕了。能够看到上面的package.json里面的scripts,里面有两个命令一本是dev另外一个是pro,分别对应开发模式和生产模式。
当团队成员开发的时候只须要运行koa
npm run dev
就能够开始开发,当部署到服务器的时候执行
npm run pro
就能够启动服务了。前提是要安装好依赖模块,就是上面说到了两种不一样的安装方式。
实际项目有可能不止这两个命令,具体的命令也可能不同,好比有可能还有测试模式的命令,又好比只须要打包文件而不要http的服务,那么这时候开发模式和生产模式就是不一样的gulp命令了。
团队中使用,最主要的是规范,像npm这样的使用确实要规范起来,减小团队配合的阻碍吧,只要是增长了什么模式,只须要告诉他看packaga.json里面的scripts, npm run xxx一下就能够了。固然这里在团队使用当中,每一个项目都应该有一个README.md 的文档来进行介绍和说明,这里就不详细介绍了。