资讯专栏INFORMATION COLUMN

React系列---Webpack环境搭建(二)不同环境不同配置

coordinate35 / 2631人阅读

摘要:系列环境搭建一手动搭建系列环境搭建二不同环境不同配置系列环境搭建三打包性能优化实际项目中,往往不同环境有不同的构建需求。

React系列---Webpack环境搭建(一)手动搭建
React系列---Webpack环境搭建(二)不同环境不同配置
React系列---Webpack环境搭建(三)打包性能优化

实际项目中,往往不同环境有不同的构建需求。比如开发、测试和生产环境对应的后端接口地址不同,生产环境需要进行代码混淆、压缩等。

因此,往往还需要将webpack配置分成多个:

安装webpack-merge,用于合并配置:

npm install webpack-merge --save-dev

安装uglifyjs-webpack-plugin,用于js代码压缩:

npm install uglifyjs-webpack-plugin --save-dev

webpack -p也可以用于代码压缩。相对而言,使用uglifyjs-webpack-plugin,可以对压缩进行更灵活的控制。

拆分webpack.config.js为以下几个配置:

基础配置 webpack.base.config.js:

const path = require("path");
const webpack = require("webpack");

const ROOT_PATH = path.resolve(__dirname);
const SRC_PATH = path.resolve(ROOT_PATH, "src");
const BUILD_PATH = path.resolve(ROOT_PATH, "dist");

module.exports = {
    entry: {
        index: path.resolve(SRC_PATH, "index.jsx")
    },
    output: {
        path: BUILD_PATH,
        filename: "js/[name].[hash:5].js"
    },
    resolve: {
        extensions: [".js", ".jsx"]
    },
    module: {
        loaders: [
            {
                test: /.jsx?$/,
                loaders: ["eslint-loader"],
                include: SRC_PATH,
                enforce: "pre"
            }, {
                test: /.jsx?$/,
                loaders: ["babel-loader"],
                include: SRC_PATH,
                exclude: path.resolve(ROOT_PATH, "node_modules")
            }
        ]
    }
};

开发环境配置,webpack.dev.config.js:

const path = require("path");
const webpack = require("webpack");
const HtmlwebpackPlugin = require("html-webpack-plugin");
const merge = require("webpack-merge");
const baseConfig = require("./webpack.base.config.js");

const ROOT_PATH = path.resolve(__dirname);
const SRC_PATH = path.resolve(ROOT_PATH, "src");
const devConfig = merge(baseConfig, {
    devtool: "eval-source-map",
    plugins: [
        new webpack.DefinePlugin({
            "process.env.NODE_ENV": ""development""
        }),
        new HtmlwebpackPlugin({
            title: "react-webpack-demo",
            filename: "index.html",
            template: path.resolve(SRC_PATH, "templates", "index.html")
        })
    ]
});

module.exports = devConfig;

测试环境配置,webpack.test.config.js:

const path = require("path");
const webpack = require("webpack");
const HtmlwebpackPlugin = require("html-webpack-plugin");
const merge = require("webpack-merge")
const baseConfig = require("./webpack.base.config.js");

const ROOT_PATH = path.resolve(__dirname);
const SRC_PATH = path.resolve(ROOT_PATH, "src");
const testConfig = merge(baseConfig, {
    plugins: [
        new webpack.DefinePlugin({
            "process.env.NODE_ENV": ""test""
        }),
        new webpack.optimize.UglifyJsPlugin({
            sourceMap: true,
        }),
        new HtmlwebpackPlugin({
            title: "react-webpack-demo",
            filename: "index.html",
            template: path.resolve(SRC_PATH, "templates", "index.html"),
            minify: {
                removeComments: true,
                collapseWhitespace: true,
                removeRedundantAttributes: true,
                removeScriptTypeAttributes: true,
                removeStyleLinkTypeAttributes: true,
                removeAttributeQuotes: true
            }
        })
    ]
});

module.exports = testConfig;

生成环境配置,webpack.prod.config.js:

const path = require("path");
const webpack = require("webpack");
const HtmlwebpackPlugin = require("html-webpack-plugin");
const merge = require("webpack-merge")
const baseConfig = require("./webpack.base.config.js")

const ROOT_PATH = path.resolve(__dirname);
const SRC_PATH = path.resolve(ROOT_PATH, "src");
const prodConfig = merge(baseConfig, {
    plugins: [
        new webpack.DefinePlugin({
            "process.env.NODE_ENV": ""production""
        }),
        new webpack.optimize.UglifyJsPlugin({
            sourceMap: true,
        }),
        new HtmlwebpackPlugin({
            title: "react-webpack-demo",
            filename: "index.html",
            template: path.resolve(SRC_PATH, "templates", "index.html"),
            minify: {
                removeComments: true,
                collapseWhitespace: true,
                removeRedundantAttributes: true,
                removeScriptTypeAttributes: true,
                removeStyleLinkTypeAttributes: true,
                removeAttributeQuotes: true
            }
        })
    ]
});

module.exports = prodConfig;

修改package.json:

"scripts": {
    "start": "webpack-dev-server --hot --progress --config webpack.dev.config.js",
    "build:dev": "rimraf dist && webpack --progress --config webpack.dev.config.js",
    "build:test": "rimraf dist && webpack --progress --config webpack.test.config.js",
    "build": "rimraf dist && webpack --progress --config webpack.prod.config.js"
},
# 启动开发调试
npm run start
# 开发环境构建
npm run build:dev
# 测试环境构建
npm run build:test
# 生产环境构建
npm run build

项目中就可以像下面这样子调用后端接口

接口HOST定义,host.js:

if (process.env.NODE_ENV === "development") {
  module.exports = `http://192.168.1.101:8000`
} else if (process.env.NODE_ENV === "test") {
  module.exports = `http://192.168.1.102:8000`
} else {
  module.exports = `http://192.168.1.103:8000`
}

接口API定义,apis.js:

import host from "./host"

function getApi (api) {
  return host + api
}

export default {
  login: getApi("/login"),
  logout: getApi("/logout"),
  ...
}

代码:https://github.com/zhutx/reac...

React系列---Webpack环境搭建(一)手动搭建
React系列---Webpack环境搭建(二)不同环境不同配置
React系列---Webpack环境搭建(三)打包性能优化

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/83695.html

相关文章

  • React系列---Webpack环境搭建(三)打包性能优化

    摘要:的选项中,是文件的输出路径是暴露的对象名,要跟保持一致是解析包路径的上下文,这个要跟下面要配置的保持一致。最后修改一下模板,增加引用文件给入口文件再加点依赖模块,方便打包观察运行打包可以看到,入口文件里依赖的,模块,直接引用了。 React系列---Webpack环境搭建(一)手动搭建React系列---Webpack环境搭建(二)不同环境不同配置React系列---Webpack环境...

    Jason_Geng 评论0 收藏0
  • Webpack系列——手把手教你使用Webpack搭建简易的React开发环境

    摘要:在这篇文章中我们开始利用我们之前所学搭建一个简易的开发环境,用以巩固我们之前学习的知识。 文章首发于我的github及个人博客,github请看https://github.com/huruji/blo...,转载请注明出处。 在这篇文章中我们开始利用我们之前所学搭建一个简易的React开发环境,用以巩固我们之前学习的Webpack知识。首先我们需要明确这次开发环境需要达到的效果:1、...

    cucumber 评论0 收藏0
  • React项目实战:环境搭建

    摘要:官方文档中文翻译构建用户界面的库。官方文档建议学习时以官方文档为准,中文翻译或者第三方作者的教程可以帮助你理清思路会用到的重要知识点我也会进行简明的解释,如遇到错误或者不理解的内容,欢迎实时指出。 前言 前面提到前端大统一的概念,如果感兴趣,欢迎说说自己的看法,点击前往。Web前端框架层出不穷,不可能面面俱到,这里给个小建议: 如果对Weex App感兴趣,应该选择vue框架; 如果...

    cnio 评论0 收藏0
  • React项目实战:环境搭建

    摘要:官方文档中文翻译构建用户界面的库。官方文档建议学习时以官方文档为准,中文翻译或者第三方作者的教程可以帮助你理清思路会用到的重要知识点我也会进行简明的解释,如遇到错误或者不理解的内容,欢迎实时指出。 前言 前面提到前端大统一的概念,如果感兴趣,欢迎说说自己的看法,点击前往。Web前端框架层出不穷,不可能面面俱到,这里给个小建议: 如果对Weex App感兴趣,应该选择vue框架; 如果...

    GHOST_349178 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<