说说对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 的文档来进行介绍和说明,这里就不详细介绍了。**
开发模式与生产模式区别:
功能名称 | 开发模式 | 生产模式 |
---|---|---|
SSL | 你可以使用weblogic安全服务提供的验证数字证书。有这些证书,你开发的应用程序会在SSL保护的环境下运行。 | 如果你使用验证数字证书,会收到警告信息。 |
部署应用程序 | weblogic实例会自动部署和更新位于domain_name/application目录下的应用程序(domain_name为域的名称) | 不能使用自动部署功能,必须使用weblogic控制台或者weblogic应用部署工具。 |
Log File Rotation | 启动服务器后,服务器自动重命名本地日志文件为server-name.n,为了滞留的session,只要日志达到500kb,日志文件就会滚转一次。 | 当日志文件达到500kb,就会滚动一次。 |
Execute Queues | 默认的执行线程为15 | 默认的执行线程为25 |
JDBC Connection Pool Capactiry | 默认的容量为15 | 默认的容量为25 |
锁定并编辑按钮 | 开发模式下并不会锁定配置更改。 | 生产模式会锁定,保证配置一致性。 |
生产模式与开发模式转换:
- 生产模式 --> 开发模式
- 将domain路径下%DOMAIN_HOME%\bin\setDomainEnv.cmd文件set PRODUCTION_MODE=true 更改为 set PRODUCTION_MODE=false 或set PRODUCTION_MODE=
- 将%DOMAIN_HOME%\config\config.xml文件中**true更改为false**或者直接删掉。
- 直接在控制台更改。
- 开发模式 --> 生产模式
- 将domain路径下%DOMAIN_HOME%\bin\setDomainEnv.cmd文件set PRODUCTION_MODE= 更改为 set PRODUCTION_MODE=true
- 将%DOMAIN_HOME%\config\config.xml文件中**True更改为true****,如果没有就添加上。**
- 直接在控制台更改。