说说对npm的开发模式和生产模式的理解
nodejs这些年的发展非常快,相信没有哪个前端不知道的了,npm也成为了前端开发中经常用到了的一个命令。那么npm不是只用一个 "npm install xxx"命令就够了吗?实际上并不是这样,发现有些团队在使用npm的时候没有认真去搞懂npm在团队里面或者说是在项目里面的一些用法。
1.从认识package.json开始
在团队里面开发,一般会分为开发模式和生产模式(可能会有不同的叫法),有时候还有测试模式,那么这些模式其实跟npm有很大的联系的。首先看一个简单的例子,先从npm依赖的package.json文件开始。
{
"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 这三个设置。
2.dependencies、devDependencies这两个的配置
关于这个两个配置,大致可以理解为当执行
npm install xxx --save
的时候,模块会记录在dependencies里面;
当执行
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这么一个模块了。
那么生产模式是怎么执行安装呢?很简单,
npm install --production
就可以了。这个例子为了理解,只是用了一两个模块,实际项目中生产模式和开发模式肯定不止区别一个模块这么简单,这个时候就更能体现出两种模式分开的必要。
还要提过的测试模式,测试模式一般是归于开发模式,即把测试模式需要用到的模块放到devDependencies 里面,目前npm是还没有独立出来测试模式的依赖设置。
3.scripts的设置
大部分人开始开发的时候,对于gulp的构建一般就执行
gulp
这个命令,对于运行node的server一般运行
node app
这样类似的命令,但是这样在团队里面的开发是不规范的,特别是有些命令加上各种参数,然后比较长的时候就会麻烦了,应该是使用"npm run" 命令和结合scripts的设置。
scripts是一个object,那么key就是对应的命令,value就是实际上执行的命令,这种命令再长也不怕了。可以看到上面的package.json里面的scripts,里面有两个命令一本是dev另一个是pro,分别对应开发模式和生产模式。
当团队成员开发的时候只需要运行
npm run dev
就可以开始开发,当部署到服务器的时候执行
npm run pro
就可以启动服务了。前提是要安装好依赖模块,就是上面说到了两种不同的安装方式。
实际项目有可能不止这两个命令,具体的命令也可能不一样,比如有可能还有测试模式的命令,又比如只需要打包文件而不要http的服务,那么这时候开发模式和生产模式就是不同的gulp命令了。
4.关于团队使用
团队中使用,最主要的是规范,像npm这样的使用确实要规范起来,减少团队配合的阻碍吧,只要是增加了什么模式,只需要告诉他看packaga.json里面的scripts, npm run xxx一下就可以了。当然这里在团队使用当中,每个项目都应该有一个README.md 的文档来进行介绍和说明,这里就不详细介绍了。
说说对npm的开发模式和生产模式的理解的更多相关文章
- weblogic开发模式与生产模式介绍
weblogic开发模式与生产模式介绍 开发模式:该模式启用自动部署 生产模式:该模式关闭自动部署 weblogic server 三种部署方法:自动部署.控制台部署.命令部署 自动部署:当其处于启用 ...
- webpack开发模式和生产模式设置及不同环境脚本执行
1. webpack设置开发模式和生产模式 (1). DefinePlugin插件设置 new webpack.DefinePlugin({ 'process.env': { NODE_ENV: '& ...
- webpack4 系列教程(十六):开发模式和生产模式·实战
好文章 https://www.jianshu.com/p/f2d30d02b719
- weblogic-开发模式与生产模式互换
生产转开发 Step 1: 目标文件:domain/bin/setDomainEnv.sh 修改内容:PRODUCTION_MODE="true"改为PRODUCTION_MODE ...
- WebLoigc的配置(生产模式与开发模式)
1.Weblogic两种模式的切换1).生产模式--->开发模式将domain路径下的bin\setDomainEnv.cmd文件中set PRODUCTION_MODE=true改为set P ...
- weblogic 生产模式和开发模式的互相转换
weblogic 生产模式和开发模式的互相转换 学习了:http://blog.csdn.net/qew110123/article/details/45845935 weblogic10.3生产模式 ...
- thinkphp---数据表更新字段开发模式可更新生产模式不能更新!
这里认为是坑的主要原因:这个问题我调试了一天,才发现是缓存的问题. 问题原因:在做一thinkphp的项目,在后期要进行修改.修改的时候,数据表里面添加了两个字段,然后前台修改模板,将添加的字段提交上 ...
- ElasticSearch生产模式开发模式的区分
ElasticSearch生产模式开发模式的区分 network.host: 0.0.0.0 如果network.host不是localhost就是生产模式, 开发模式中的warning就是生产模式中 ...
- 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组
真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...
随机推荐
- linux服务器ssh免密码登录
假设有三台服务器的ip分别是10.9.1.101.10.9.1.102.10.9.1.103 修改hosts文件 分别修改三台服务器的hosts的文件(vi /etc/hosts), 在hosts文件 ...
- 机器学习基石笔记:15 Validation
一.模型选择问题 如何选择? 视觉上 NO 不是所有资料都能可视化;人脑模型复杂度也得算上. 通过Ein NO 容易过拟合;泛化能力差. 通过Etest NO 能保证好的泛化,不过往往没法提前获得测试 ...
- 题解 P2146 【[NOI2015]软件包管理器】
题目大意 给你一棵树, 求一点到根的路径上有多少个未标记点并全标记, 和询问一个点的子树内有多少已标记点和撤销标记 解题方法 1: install 操作 这个操作是求一点到根的路径上有多少个未 ...
- Git for Windows之团队合作
1.先给项目添加一个成员 输入对方码云邮箱账号,添加成功. 2.登陆,将码云上面的项目克隆到本地 (1).设置全局参数 用户名和邮箱用于push和pull代码 (2).克隆目标项目地址 查看本地文件 ...
- Postman入门
- ASP.NET Core 中使用 GrayLog 记录日志
使用 UDP 协议发送日志 自定义好的查询 key 存储数据,尽量不要使用 graylog2-server 服务端格式化日志再存储 Ubuntu 安装服务端 sudo apt-get update & ...
- iOS事件分发
前段时间项目有一个需求,要在点击闪屏的时候做一些处理,刚接到这个需求觉得很简单啊,在原有的view上加个button或者手势识别啥的,后面实现的时候发现还是有点坑.无论我在闪屏上面加button还是手 ...
- oc中的枚举
如果一个变量只有几种可能的值,比如星期有几天,一年有几个季节等.这个时候可以用枚举变量. 先定义类型再定义变量,如:enum siji{chun,xia,qiu,dong} 也可以定义匿名:enum{ ...
- print默认在末尾添加一个换行符,但其实也可以不用!
白月黑羽今天给大家分享另外一个冷知识:) python中 print函数打印信息时默认添加一个换行符,所以你看到一条print语句,则单独占一行,那是否可以不要换行符呢? 答案是肯定的,当然可以,可用 ...
- 深入理解java中HelloWorld的执行流程
HelloWorld.java是我们学习java的第一个程序,简单的再也不能简单了,可是里面的原理以及执行流程大家都知道吗?最近在复习java知识,特地钻研了一番分享给大家! 贴出HelloWorld ...