1. 概述

生产环境和开发环境所需依赖是不同:

--开发依赖:就是开发中用到而发布时用不到的。在package.json里面对应的就是devDependencies下面相关配置。

--生产依赖: 就是比如我们的javascript使用了jquery,而我们最终的程序也需要这个包(最终程序正常运行需要的)。这个包就在package.json下的dependencies中。

2. npm安装方式对比

假如我们要在项目中使用jquery库。采用(2.1~2.3三种方式)

2.1 全局安装

npm install jquery

或者

npm install jquery -g

安装完成后,会发现在package.json中并不存在这个包的依赖。这是由于全局安装将安装包放在 /usr/local 下或者你 node 的安装目录,例如windows上的安装地址为  C:\Program Files\nodejs\node_modules\webpack_tmp。使用这种安装方式我们可以

直接在命令行里使用。当我们把项目拷贝给别人继续开发,或者别人把我们发布到的git上代码clone下来,使用npm install安装相关包时就会缺少这个jquery包。项目就会无法正常运行,所以这也是我们最不赞成的安装方法。

2.2 安装到生成环境

安装指令为:

npm  install jquery --save

它存在于package.json的dependencies中,它是生产环境需要依赖的包(上线时需要的依赖包)。

执行该条指令后产生的后续效果为:

(1)会把jquery包安装到node_modules目录中

(2)会在package.json的dependencies属性下添加jquery

(3)之后运行npm install命令时,会自动安装jquery到node_modules目录中

(4)之后运行npm install --production或者注明NODE_ENV变量值为production时,会自动安装jquery到node_modules目录中

2.3 安装到开发环境

安装指令为:

npm install jquery --save-dev

安装完成后,它存在于package.json的devDependencies中,它是开发环境中需要使用的,但上线时并不需要这个包的依赖。

执行该条指令后产生的后续效果为:

(1)会把jquery包安装到node_modules目录中

(2)会在package.json的devDependencies属性下添加jquery

(3)之后运行npm install命令时,会自动安装jquery到node_modules目录中

(4)之后运行npm install --production或者注明NODE_ENV变量值为production时,不会自动安装jquery到node_modules目录中

2.4 本地安装全部项目依赖包

当我们从GIT上面拷贝一个包要安装所有的包就必须进行本地安装,

安装指令为:

npm install

执行该条指令后产生的后续效果为:

(1)将项目所需的安装包(开发包、生产包)放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有node_modules目录,会在当前执行npm命令的目录下生成node_modules目录。

(2)可以通过 require()来引入本地安装的包。

2.5 安装生产环境依赖包

安装指令为:

npm install --production

添加了production参数后将只安装package.json中dependencies里面的包,不会安装devDependencies里面的包。

3.配置生产和开发并行

我们在以前的配置中设置了一个变量website,用于正确找到静态资源路径。如果我们生产环境和开发环境中的相关路径不一样,那我们就得在两个环境中来回切换,这时我们就得修改之前的路径配置方式。

以前的路径配置:

var website ={
publicPath:"http://localhost:1818/"
}

3.1 实现在生产环境和开发环境中来回切换的配置

实质为运行不同的指令,得地所需结果。

3.1.1 修改package.json命令

实质为添加dev设置、build设置,并通过环境变量来进行区分,下面是package.json里的值。

"scripts": {
"server": "webpack-dev-server --open",
"dev":"set type=dev&webpack",
"build": "set type=build&webpack"
},

3.1.2 修改webpack.config.js文件

利用node的语法来读取type的值,然后根据type的值用if–else判断当前指令执行的是开发环境下的打包操作还是生产环境下的打包操作。

if(process.env.type== "dev"){
var website={
publicPath:"http://localhost:1818/" //开发环境中的路径配置
}
}else{
var website={
publicPath:"http://www.wfaceboss.top/" //生产环境中的路径配置
}
}

如果想看一下执行打包指令时传过来的值到底是什么?可以在webpack.config.js用下面的输出语句

console.log( encodeURIComponent(process.env.type) );

Mac下的package.json设置:

MAC电脑下需要把set换成export,并且要多加一个&符,具体代码如下。

"scripts": {
"server": "webpack-dev-server --open",
"dev":"export type=dev&&webpack",
"build": "export type=build&&webpack"
},

(17/24) webpack实战技巧:生产环境和开发环境并行设置,实现来回切换的更多相关文章

  1. (23/24) webpack实战技巧:如何在webpack环境中使用Json

    在webpack1或者webpack2版本中,若想在webpack环境中加载Json文件,则需要加载一个json-loader的loader进来的.但是在webpack3.x版本中,则不需要在另外引入 ...

  2. (21/24) webpack实战技巧:webpack对三方类库的优化操作

    1.优化第一步--选用引入方式 在前面的学习中我们对于如何引入第三方类库(Jquery)推荐了两种方式,第一种是import引入的方式,第二种是ProvidePlugin插件.那两种引入方法有什么区别 ...

  3. (19/24) webpack实战技巧:推荐使用的第三方类库打包方法

    在日常的开发中,总避免不了引入第三方的框架,比如常用的JQuery,此节我们来学习一下如何优雅并正确的用webpack引入第三方库. 这里我们以第三方框架JQuery为例: 1.在入口文件中引入 1. ...

  4. (22/24) webpack实战技巧:静态资源集中输出

    工作中会有一些已经存在但在项目中没有引用的图片资源或者其他静态资源(比如设计图.开发文档),这些静态资源有可能是文档,也有可能是一些额外的图片,而在打包时保留这些静态资源,直接打包到指定文件夹中.此时 ...

  5. (20/24) webpack实战技巧:watch实现热打包和添加代码备注

    在前面的学习中,我们一直使用webpack-dev-server充当(本地)服务器和完成打包任务,但是当出项目团队联合开发,共同使用一个服务器时,这时候我们需要实时进行打包以确保团队间能进行联调或者进 ...

  6. (18/24) webpack实战技巧:快速入门webpack模块化配置

    搞个小例子便于学习: 具体操作为把上节中的webpack.config.js中的entry入口文件进行模块化设置,单独拿出来制作成一个模块. 1.在根目录新建一个config文件,然后新建webpac ...

  7. 【webpack学习笔记】a06-生产环境和开发环境配置

    生产环境和开发环境的配置目标不一样,生产环境主要是让文件压缩得更小,更优化资源,改善加载时间. 而开发环境,主要是要开发更方便,更节省时间,比如调试比如自动刷新. 所以可以分开配置不同的开发环境,然后 ...

  8. Maven Filter与Profile隔离生产环境与开发环境

    Maven Filter与Profile隔离生产环境与开发环境 在不同的开发阶段,我们一般用到不同的环境,开发阶段使用开发环境的一套东西,测试环境使用测试环境的东西,可能有多个测试环境,生产环境使用的 ...

  9. 通过Maven配置测试环境和开发环境连接不同的数据库

    通过Maven配置测试环境和开发环境连接不同的数据库   作者及来源: 通灵宝玉 - 博客园    收藏到→_→: 此文来自: 马开东博客 网址:http://www.makaidong.com   ...

随机推荐

  1. Python3 与 Python2 的不同

    1. Python3中的字典,删除了has_key(key)的方法. Python2: if result.has_key(middle_s) != None result[middle_s] = 1 ...

  2. sql sever 2012重装数据库时,出现cannot find one or more components, Please reinstall the application.解决方法

    错误原因: 由于我将SQL数据库做了删除,重装.在删除的过程中,不小心删除了某个SQL的插件,导致了这种问题的出现. 当我们去操作工具时,也会提示以上错误. 解决办法: 1)去控制面板--所有控制面板 ...

  3. Python 斗地主发牌

    #coding = utf-8 import random def Creat_Card(): card_type = ['♥','♠','♦','♣'] card_values= ['A', '2' ...

  4. 【python】闭包

    一.闭包满足的条件 闭包 = 内部函数 + 定义函数的环境 条件一 : 内部函数 条件二: 外部环境的变量 二.实战 def outer(): x = 10 y = 20 def inner(): p ...

  5. 联想拯救者r720+固态浦科特M8PeGN 的bios 设置

    最近笔记本左边的两个usb3.0接口都坏了,win10 报错usb端口上的电涌 真是一脸蒙B! 然后去打售后电话,说昌平没有售后,需要去海淀黄庄去维修,然后下午就去了那里,维修的人员说硬件坏了,需要1 ...

  6. angular1中ng-repeat效率优化方法:

    1.当 ng-repeat 的数组被替换时, 它默认并不会重新利用已有的 Dom 元素,而是直接将其全部删除并重新生成新的数组 Dom 元素: 2.Dom 的频繁操作是非常不友好的, ng-repea ...

  7. Android 异步请求通用类

    package com.example.demo1; import java.util.EventListener; public interface MyAsyncTaskListener exte ...

  8. linux下目录简介——/proc

    1. /proc目录Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文 ...

  9. tolua 转换 std::shared_ptr

    tolua 转换 std::shared_ptr 自从c++11以后std::shared_ptr几乎是比用的东西,经常会遇到类似如下应用 std::shared_ptr<Tst_ShareTe ...

  10. 使用QTP12.2录制windows applications,没有脚本产生

    使用QTP12.2录制windows applications,没有脚本产生解决方案:关闭电脑的杀毒软件和安全卫士,再进行录制,所有步骤录制成功.录制QTP自带程序flight,选择windows a ...