webpack 環(huán)境變量(18)

獲取全套webpack 4.x教程,請(qǐng)?jiān)L問(wèn)瓦力博客

小菜之前在webpack配置中區(qū)分開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境,但是在源代碼中還不能區(qū)分當(dāng)前是開(kāi)發(fā)環(huán)境還是生產(chǎn)環(huán)境。我們可能會(huì)遇到這種情況,如在開(kāi)發(fā)的時(shí)候請(qǐng)求地址http://www.waliblog.com/login但是項(xiàng)目上線(xiàn)后,請(qǐng)求地址就變成http://www.baidu.com/login。我們需要完成這種操作,需要用到DefinePlugin 文檔{:target="_blank"}插件

1.安裝

DefinePlugin 允許創(chuàng)建一個(gè)在編譯時(shí)可以配置的全局常量。這可能會(huì)對(duì)開(kāi)發(fā)模式和生產(chǎn)模式的構(gòu)建允許不同的行為非常有用。如果在開(kāi)發(fā)構(gòu)建中,而不在發(fā)布構(gòu)建中執(zhí)行日志記錄,則可以使用全局常量來(lái)決定是否記錄日志。這就是 DefinePlugin 的用處,設(shè)置它,就可以忘記開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境構(gòu)建的規(guī)則。之前安裝過(guò)webpack就不需要安裝了

yarn add webpack

2.配置

build/plugins.js

const dirpath = require('./base/path');
const config = require('./base/config');

const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');    //生成html文件
const { CleanWebpackPlugin } = require('clean-webpack-plugin');  //清除
const MiniCssExtractPlugin = require("mini-css-extract-plugin");  //css樣式提取


let plugins = [
    new HtmlWebpackPlugin({
        title: '瓦力博客',
        template: dirpath.src + '/index.html'   //以src/index.html為編譯模板
    }),
    new  MiniCssExtractPlugin({
        filename: config.NODE_ENV == 'development'?'[name.css]': `${dirpath.css}/[name].[hash].css`,
        chunkFilename: config.NODE_ENV == 'development'?'[id].css': `${dirpath.css}/[id].[hash].css`
    }),   //css提取
    new webpack.ProvidePlugin({
        _:'loadsh',
        url: ['../src/api/apipath', 'url']
    }),
+   new webpack.DefinePlugin({ 
+       IS_PRODUCTION: config.NODE_ENV == 'development'?JSON.stringify(false):JSON.stringify(true),
+   }),
    new CleanWebpackPlugin()
]

if('development' == config.NODE_ENV){
    plugins.push(new webpack.HotModuleReplacementPlugin());
}

module.exports = plugins;

api/apipath.js

let host

if(IS_PRODUCTION){
    host = 'http://www.baidu.com'
}else {
    host = 'http://www.walibo.com'
}

export const url = {
    login: `${host}/login`,         //登錄
    signout: `${host}/signout`      //退出登錄
}

index.js

console.log(url)

開(kāi)發(fā)webpack

yarn run dev

打開(kāi)控制臺(tái),會(huì)看到控制臺(tái)輸出:

Object
login: "http://www.walibo.com/login"
signout: "http://www.walibo.com/signout"

生產(chǎn)webpack

yarn run prod

打開(kāi)控制臺(tái),會(huì)看到控制臺(tái)輸出:

{login: "http://www.baidu.com/login", signout: "http://www.baidu.com/signout"}

到此本小節(jié)就結(jié)束了,小伙伴們繼續(xù)加油

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 寫(xiě)在開(kāi)頭 先說(shuō)說(shuō)為什么要寫(xiě)這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,432評(píng)論 4 31
  • webpack 介紹 webpack 是什么 為什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert閱讀 6,662評(píng)論 2 71
  • 在現(xiàn)在的前端開(kāi)發(fā)中,前后端分離、模塊化開(kāi)發(fā)、版本控制、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開(kāi)始...
    Charlot閱讀 5,653評(píng)論 1 32
  • 原文首發(fā)于:Webpack 3,從入門(mén)到放棄 Update (2017.8.27) : 關(guān)于 output.pub...
    昵稱(chēng)都被用完了衰閱讀 1,987評(píng)論 4 19
  • 農(nóng)村的夜里漆黑一片 婆婆拿來(lái)一些雞蛋打了在碗里 也在幫忙 隱約看到院子里有人 就像小時(shí)候家里院子里進(jìn)了賊的影子 休...
    何英_be10閱讀 144評(píng)論 0 0

友情鏈接更多精彩內(nèi)容