国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

React系列---Webpack環(huán)境搭建(二)不同環(huán)境不同配置

coordinate35 / 2633人閱讀

摘要:系列環(huán)境搭建一手動(dòng)搭建系列環(huán)境搭建二不同環(huán)境不同配置系列環(huán)境搭建三打包性能優(yōu)化實(shí)際項(xiàng)目中,往往不同環(huán)境有不同的構(gòu)建需求。

React系列---Webpack環(huán)境搭建(一)手動(dòng)搭建
React系列---Webpack環(huán)境搭建(二)不同環(huán)境不同配置
React系列---Webpack環(huán)境搭建(三)打包性能優(yōu)化

實(shí)際項(xiàng)目中,往往不同環(huán)境有不同的構(gòu)建需求。比如開(kāi)發(fā)、測(cè)試和生產(chǎn)環(huán)境對(duì)應(yīng)的后端接口地址不同,生產(chǎn)環(huán)境需要進(jìn)行代碼混淆、壓縮等。

因此,往往還需要將webpack配置分成多個(gè):

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

npm install webpack-merge --save-dev

安裝uglifyjs-webpack-plugin,用于js代碼壓縮:

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

webpack -p也可以用于代碼壓縮。相對(duì)而言,使用uglifyjs-webpack-plugin,可以對(duì)壓縮進(jìn)行更靈活的控制。

拆分webpack.config.js為以下幾個(gè)配置:

基礎(chǔ)配置 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")
            }
        ]
    }
};

開(kāi)發(fā)環(huán)境配置,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;

測(cè)試環(huán)境配置,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;

生成環(huán)境配置,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"
},
# 啟動(dòng)開(kāi)發(fā)調(diào)試
npm run start
# 開(kāi)發(fā)環(huán)境構(gòu)建
npm run build:dev
# 測(cè)試環(huán)境構(gòu)建
npm run build:test
# 生產(chǎn)環(huán)境構(gòu)建
npm run build

項(xiàng)目中就可以像下面這樣子調(diào)用后端接口

接口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環(huán)境搭建(一)手動(dòng)搭建
React系列---Webpack環(huán)境搭建(二)不同環(huán)境不同配置
React系列---Webpack環(huán)境搭建(三)打包性能優(yōu)化

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/83695.html

相關(guān)文章

  • React系列---Webpack環(huán)境搭建(三)打包性能優(yōu)化

    摘要:的選項(xiàng)中,是文件的輸出路徑是暴露的對(duì)象名,要跟保持一致是解析包路徑的上下文,這個(gè)要跟下面要配置的保持一致。最后修改一下模板,增加引用文件給入口文件再加點(diǎn)依賴模塊,方便打包觀察運(yùn)行打包可以看到,入口文件里依賴的,模塊,直接引用了。 React系列---Webpack環(huán)境搭建(一)手動(dòng)搭建React系列---Webpack環(huán)境搭建(二)不同環(huán)境不同配置React系列---Webpack環(huán)境...

    Jason_Geng 評(píng)論0 收藏0
  • Webpack系列——手把手教你使用Webpack搭建簡(jiǎn)易的React開(kāi)發(fā)環(huán)境

    摘要:在這篇文章中我們開(kāi)始利用我們之前所學(xué)搭建一個(gè)簡(jiǎn)易的開(kāi)發(fā)環(huán)境,用以鞏固我們之前學(xué)習(xí)的知識(shí)。 文章首發(fā)于我的github及個(gè)人博客,github請(qǐng)看https://github.com/huruji/blo...,轉(zhuǎn)載請(qǐng)注明出處。 在這篇文章中我們開(kāi)始利用我們之前所學(xué)搭建一個(gè)簡(jiǎn)易的React開(kāi)發(fā)環(huán)境,用以鞏固我們之前學(xué)習(xí)的Webpack知識(shí)。首先我們需要明確這次開(kāi)發(fā)環(huán)境需要達(dá)到的效果:1、...

    cucumber 評(píng)論0 收藏0
  • React項(xiàng)目實(shí)戰(zhàn):環(huán)境搭建

    摘要:官方文檔中文翻譯構(gòu)建用戶界面的庫(kù)。官方文檔建議學(xué)習(xí)時(shí)以官方文檔為準(zhǔn),中文翻譯或者第三方作者的教程可以幫助你理清思路會(huì)用到的重要知識(shí)點(diǎn)我也會(huì)進(jìn)行簡(jiǎn)明的解釋?zhuān)缬龅藉e(cuò)誤或者不理解的內(nèi)容,歡迎實(shí)時(shí)指出。 前言 前面提到前端大統(tǒng)一的概念,如果感興趣,歡迎說(shuō)說(shuō)自己的看法,點(diǎn)擊前往。Web前端框架層出不窮,不可能面面俱到,這里給個(gè)小建議: 如果對(duì)Weex App感興趣,應(yīng)該選擇vue框架; 如果...

    cnio 評(píng)論0 收藏0
  • React項(xiàng)目實(shí)戰(zhàn):環(huán)境搭建

    摘要:官方文檔中文翻譯構(gòu)建用戶界面的庫(kù)。官方文檔建議學(xué)習(xí)時(shí)以官方文檔為準(zhǔn),中文翻譯或者第三方作者的教程可以幫助你理清思路會(huì)用到的重要知識(shí)點(diǎn)我也會(huì)進(jìn)行簡(jiǎn)明的解釋?zhuān)缬龅藉e(cuò)誤或者不理解的內(nèi)容,歡迎實(shí)時(shí)指出。 前言 前面提到前端大統(tǒng)一的概念,如果感興趣,歡迎說(shuō)說(shuō)自己的看法,點(diǎn)擊前往。Web前端框架層出不窮,不可能面面俱到,這里給個(gè)小建議: 如果對(duì)Weex App感興趣,應(yīng)該選擇vue框架; 如果...

    GHOST_349178 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<