一个十分简单的、关于生产环境和开发环境的webpack配置

关于这个开发环境和生产环境的配置代码,之所有要分开是因为他们有些代码相同,有的又不同。

例如:开发模式下需要启动本地服务器,需要热重载,而生产模式不需要这些需要代码压缩、DefinePlugin等。

我们都是将两种环境都用用到的提取出来,放在一个公共.js文件。然后在相应的环境配置中使用  webpack-merge  将公共js合并进来。

我所了解到的配置思路,有两种:

方法一: 使用webpack-dev-server配置开发环境(这个简洁一些);

方法二: 使用webpack-dev-middleware 和 webpack-hot-middleware配置开发环境;( 应该是我们经常用到的,因为vue-cli就是用的这个 );

方法一可直接参考这个——webpack官方文档的详细介绍

先看看项目结构

方法二:

使用webpack-dev-middleware 和 webpack-hot-middleware手动配置自动刷新和热重载。也就需要用node来启动;

因为本身webpack-dev-server就是通过这两个node中间件加上express实现的。这个可自行百度验证。

我们通过执行过程来看这个是怎么搭建的。

启动命令:

  "scripts": {
    "dev": "set NODE_ENV=development&& node build/webpack-env.js",
    "build": "set NODE_ENV=prodction&& node build/webpack-env.js"
  },

  不同命令下设置的环境变量不同(这里的NODE_ENV,在webpack-env.js中通过process.env.NODE_ENV访问);

注意: liunx和mac下使用  export  而不是 set;

来到了我的入口文件里面:

var path = require(‘path‘);
var webpack = require(‘webpack‘);
var app = require(‘express‘)();
var devConfig = require(‘./webpack.dev.js‘);  //导入开发环境配置
var prodConfig = require(‘./webpack.prod.js‘);   //导入生产环境配置

var compiler = webpack(devConfig);
var env = process.env.NODE_ENV;  //获取我们在package.json里面设置的环境变量
var port = ‘8000‘;

(function() {
  //生产环境
  if (env == ‘prodction‘) {    //如果是生产环境,直接打包,然后退出这个匿名函数,否则执行开发环境逻辑
    webpack(prodConfig, function(err, status) {
      if (err) throw err;
    });
    return;
  }

  //开发环境
  //设置‘webpack.common.js’的入口配置
  Object.keys(devConfig.entry).forEach(function(key) {    //这里的reload=true,作用就是页面自动刷新
    devConfig.entry[key] = [‘webpack-hot-middleware/client?reload=true‘].concat(devConfig.entry[key]);
  })
  var devMiddleware = require(‘webpack-dev-middleware‘)(compiler, {
    stats: {
      colors: true,  //设置日志颜色
    }
  });
  var hotMiddleware = require(‘webpack-hot-middleware‘)(compiler);

  app.use(devMiddleware);
  app.use(hotMiddleware);

  //首次编译后的回调函数
  devMiddleware.waitUntilValid(function() {
    console.log("listen at localhost:" + port);
    //自动打开浏览器
    require(‘opn‘)(‘http://localhost:‘ + port);
  });
  app.listen(port);
})();

如果是开发环境,执行webpack-dev.js:

const Merge = require(‘webpack-merge‘);
const webpack = require(‘webpack‘);
const CommonConfig = require(‘./webpack.base.js‘);  //导入公共基础配置
//使用“webpack-merge”将公共配置和生产配置合并
module.exports = Merge(CommonConfig, {
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
  ]
})

我在这个生产环境下添加了一个它独有的  热重载时所需的插件,可以在这个基础上添加更多。

如果是生产环境,执行webpack-prod.js:

const Merge = require(‘webpack-merge‘);
const webpack = require(‘webpack‘);
const CommonConfig = require(‘./webpack.base.js‘);

module.exports = Merge(CommonConfig, {
  plugins: [
    new webpack.LoaderOptionsPlugin({
      minimize: true,
      debug: false
    }),
    new webpack.DefinePlugin({
      //打包过后会将index.js等文件内的 ‘process.env.NODE_ENV’ 替换为 ‘production’
      ‘process.env‘: {
        ‘NODE_ENV‘: JSON.stringify(‘production‘)
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      beautify: false,
      mangle: {
        screw_ie8: true,
        keep_fnames: true
      },
      compress: {
        screw_ie8: true
      },
      comments: false
    })
  ]
})

这个也是同理。

环境环境变量可以用专门的文件来设置,而不用设置到package.json。但是比较懒。。。

这个主要体现生产和开发是如何分离的。一些我们常用的熟悉的loader以及插件,都可以在这个基础上添加。所以我就不过多阐述。

项目地址:https://github.com/liyang0612/light-complete-webpack

时间: 2024-10-11 13:31:29

一个十分简单的、关于生产环境和开发环境的webpack配置的相关文章

angular4的多环境(测试环境与开发环境,生产环境)

使生成项目可以多环境运行(测试环境与开发环境,生产环境) 这里对应的是不同的运行环境,随时通过上面的方式进行切换 同样着也可以用在部署环境上面..这个表式编译生成生产环境的微信号 原文地址:https://www.cnblogs.com/boonook/p/8689291.html

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

通过Maven配置测试环境和开发环境连接不同的数据库 作者及来源: 通灵宝玉 - 博客园    收藏到→_→: 此文来自: 马开东博客 网址:http://www.makaidong.com 摘要: 通过Maven配置测试环境和开发环境连接不同的数据库 "通过Maven配置测试环境和开发环境连接不同的数据库":关键词:通过 maven 配置 测试 环境 开发 环境 连接 不同 其他数据库 通过maven配置测试环境和开发环境连接不同的其他数据库 操作上分3个步骤 1.在数据持久层的po

01_Android应用开发环境_03_开发环境搭建及简单Android程序

搭建开发环境,创建模拟器,最后完成一个简单的Android版应用程序并介绍项目目录. 1 搭载Android开发环境 1.1 安装Eclipse和ADT     下载Android SDK.SDK的全称是软件开发工具包(Software Development Kit),Android SDK提供了一些开发Android所必须的API库以及开发工具,用于开发测试和调试Android应用程序.ADT是一个Eclipse的插件,它包含了一些使用Eclipse开发Android应用程序所需要的工具包.

简单地基于thinkphp的网站开发环境搭建

1.安装Notepad,这是一个很好的编辑器,方便后续的编辑(默认安装即可) 2.安装与配置WAMPsever 首先是安装WAMPsever,根据提示一步一步安装 注意安装路径,尽量自己重新设置一下,这里设为d:\wamp 选择创建桌面快捷方式 这个直接点打开 后面都是默认设置,直到安装完成. 将WAMPsever服务打开,会在右下角显示,绿色表示正常 (切换中文的话,右键这个标志选择language,选择chinese即可) 下面打开浏览器,输入localhost,如果显示如下,则WAMPse

##从0开始写一个混合app(andriod)##第1天,搭建开发环境

环境搭建参考 http://reactnative.cn/docs/0.42/getting-started.html#content 我的电脑是win8.1 64位的,后面提供的安装包都是window X64的,建议用迅雷,百度云盘下载 下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载android studio 附带sdk http://pan.baidu.

简单python接口测试编写和django开发环境的搭建

安装django环境 启动django D:\python\imooc>python manage.py runserver 0.0.0.0:8000 命令行下django新建app D:\python\imooc>python manage.py startapp api 示例: 简单定义login函数 模拟接口开发 编写登录页面 接口 设置 测试,可以打开页面 注释掉csrf 编写get接口 原文地址:https://www.cnblogs.com/reblue520/p/10337320

vue中使用axios给生产环境和开发环境配置不同的baseUrl

第一步:设置不同的接口地址 找到文件:/config/dev.env.js 代码修改为: var merge = require('webpack-merge') var prodEnv = require('./prod.env') module.exports = merge(prodEnv, { NODE_ENV: '"development"', //添加 API_ROOT: '"//192.168.1.8/api"' }) /config/prod.env

从0构建webpack开发环境(三) 开发环境以及 webpack-dev-server 的使用

sourceMap 实际应用开发过程中大部分时间都是处于开发模式中,其中需要频繁的修改代码.调试和打包. 但是打包后的代码多个模块压缩到了一个bundle文件,如果出现警告或者异常很难定位到具体模块和位置,所以webpack提供了source map的配置 devtool, 该配置可选且具有多个配置项 ,具体包含以下: devtool 构建速度 重新构建速度 生产环境 品质(quality) (none) +++ +++ yes 打包后的代码 eval +++ +++ no 生成后的代码 che

Eclipse Maven profiles 多环境配置,测试环境与开发环境分开打包

1.将开发环境.测试环境.生产环境的配置文件分开存放,如下图: 2.在Maven中配置不同的环境打包配置文件的路径,配置如下: <profiles> <profile> <!-- 开发环境 --> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <!-- 默认激活该profile节点-->