国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

webpack中mode、NODE_ENV、DefinePlugin、cross-env的使用

這篇具有很好參考價值的文章主要介紹了webpack中mode、NODE_ENV、DefinePlugin、cross-env的使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

webpack中mode、NODE_ENV、DefinePlugin、cross-env的使用,webpack,cross-env,NODE_ENV,mode,DefinePlugin

本文講的全部知識點,都是和webpack相關(guān)的。如果你之前有疑問,那本文一定能幫你搞清楚。

問題來源一般是類似下面代碼(webpack.json中):

"scripts": {
    "dev": "cross-env NODE_ENV=development webpack-dev-server --config ./config/webpack.config.dev.js"
  },

代碼中出現(xiàn)的:cross-envNODE_ENV。還有webpack.config.js中設(shè)置的mode、DefinePlugin。

環(huán)境版本(如果是低版本下面也會提及):

  • webpack < v4
  • webpack-dev-server < v4
  • cross-env < v5

編譯環(huán)境和運行環(huán)境

在講下面之前,我們必須清楚什么是編譯環(huán)境,什么是運行環(huán)境?

  • 編譯環(huán)境(node環(huán)境)

我們在終端執(zhí)行:npm run devnpm run start 或打包 npm run build 都是在編譯環(huán)境,也就是node環(huán)境。所以webpack的配置文件 webpack.config.jswebpack.dev.jswebpack.production.js 是運行在編譯環(huán)境中的。

  • 運行環(huán)境(瀏覽器環(huán)境)

我們寫的業(yè)務(wù)代碼等都是在瀏覽器中運行的,也就是打包之后我們的代碼還在的。

只有區(qū)分這兩個環(huán)境,才能理解下面不同配置方式,有時能讀取到,有時讀取不到的原因.

概念

mode

模式, webpack會根據(jù)mode的值做一些內(nèi)置優(yōu)化。

枚舉值:none, developmentproduction(默認(rèn))。 只能是這三個值中某一個。

配置方式:

  • 方式一(推薦)

在webpack配置文件(webpack.config.js、webpack.develop.js、webpack.production.js)中設(shè)置:

module.exports = {
  mode: 'development'
};
  • 方式二

package.json中,webpack的CLI命令參數(shù):

webpack serve --mode=development

這兩種方式設(shè)置的mode值,只能在業(yè)務(wù)代碼(運行環(huán)境)中通過process.env.NODE_ENV讀取到;在編譯環(huán)境,webpack配置文件中是讀取不到的。

注意:

webpack 4+ 中,你不需要做任何設(shè)置(其實是webpack自動幫你把變量加到了DefinePlugin中)就可以在代碼中讀取process.env.NODE_ENV的值了。

但是在 webpack 3 及其更低版本中,你需要在webpack配置文件中使用 DefinePlugin設(shè)置成全局變量,才可以訪問得到:

var webpack = require('webpack')

module.exports = {
  // ...
  plugins: [
    // ...
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('production')
    })
  ]
}

NODE_ENV

上面我們設(shè)置mode,是在運行環(huán)境中使用;如果想在編譯環(huán)境(webpack配置文件中使用)就需要用到NODE_ENV了。

本質(zhì)就是給當(dāng)前Node進(jìn)程,設(shè)置一個環(huán)境變量。只有在當(dāng)前Node進(jìn)程中有效。

設(shè)置方式:

package.json中:

{
  "scripts": {
    "dev": "NODE_ENV=development webpack-dev-server --config webpack.dev.config.js"
  }
}

你如果是mac電腦執(zhí)行npm run dev是能正常運行的,但如果你是windows電腦,會報錯:

'NODE_ENV' 不是內(nèi)部或外部命令,也不是可運行的程序或批處理文件。

是的,在windows里面需要修改命令為:

{
  "scripts": {
    "dev": "set NODE_ENV=development && webpack-dev-server --config ./config/webpack.config.dev.js"
  }
}

要解決跨環(huán)境問題,就要用到下面的cross-env了,我們一會在講,還是先回來。

設(shè)置了NODE_ENV=development后,在哪使用,如何使用呢?

答案:只能在編譯環(huán)境(webpack的配置文件webpack.config.js等)中使用??梢酝ㄟ^**process.env.NODE_ENV讀取。**在業(yè)務(wù)代碼中是無法讀取的。

cross-env

為解決跨環(huán)境問題。

安裝:

npm install cross-env@5

修改package.json中命令:

{
  "scripts": {
    "dev": "cross-env NODE_ENV=development webpack-dev-server --config webpack.dev.config.js"
  }
}

這樣在macwindows中就都可以執(zhí)行npm run dev了。

DefinePlugin

上面在講mode時已經(jīng)提到了DefinePlugin ,它主要用來定義一些全局變量,并會在 編譯時 將你代碼中的全局變量替換為具體值。這在需要根據(jù)開發(fā)模式與生產(chǎn)模式進(jìn)行不同的操作時,非常有用。

new webpack.DefinePlugin({
  // 定義...
});
使用

傳遞給 DefinePlugin 的每個鍵都是一個標(biāo)識符或多個以 . 連接的標(biāo)識符。

  • 如果該值為字符串,它將被作為代碼片段來使用。
  • 如果該值不是字符串,則將被轉(zhuǎn)換成字符串(包括函數(shù)方法)。
  • 如果值是一個對象,則它所有的鍵將使用相同方法定義。
  • 如果鍵添加 typeof 作為前綴,它會被定義為 typeof 調(diào)用。

這些值將內(nèi)聯(lián)到代碼中,從而允許通過代碼壓縮來刪除冗余的條件判斷。

new webpack.DefinePlugin({
  PRODUCTION: JSON.stringify(true),
  'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
});

提示:

請注意,由于本插件會直接替換文本,因此提供的值必須在字符串本身中再包含一個 實際的引號 。通常,可以使用類似 '"production"' 這樣的替換引號,或者直接用 JSON.stringify('production')。

if (!PRODUCTION) {
  console.log('Debug info');
}

if (PRODUCTION) {
  console.log('Production log');
}

未經(jīng) webpack 壓縮過的代碼:

if (!true) {
  console.log('Debug info');
}
if (true) {
  console.log('Production log');
}

經(jīng)過壓縮后:

console.log('Production log');

cross-env + DefinePlugin

確切的講,使用cross-env可以定義任意Node全局環(huán)境變量,例如package.json中:

{
  "scripts": {
    "dev": "cross-env NODE_ENV=development PUBLIC_PATH=/ui webpack-dev-server --config webpack.dev.config.js"
  }
}

我們這里又新增了一個全局變量PUBLIC_PATH,用來設(shè)置URL基礎(chǔ)路徑。

在編譯環(huán)境(webpack.config.js)中,可以直接使用process.env.PUBLIC_PATH獲取。

并可以通過添加到DefinePlugin,在代碼中使用

new webpack.DefinePlugin({
  PUBLIC_PATH: JSON.stringify(process.env.PUBLIC_PATH),
});

定義之后就可以在代碼中使用了:文章來源地址http://www.zghlxwxcb.cn/news/detail-860100.html

const url = PUBLIC_PATH + '/views'
console.log(url); // =>'/ui/views'

總結(jié)

  1. mode是設(shè)置執(zhí)行模式,webpack4會自動將mode的值通過DefinePlugin設(shè)置為全局變量,業(yè)務(wù)代碼中可以使用process.env.NODE_ENV讀取值。
  2. NODE_ENV是設(shè)置Node環(huán)境變量,在webpack.config.js、webpack.dev.js等文件中通過process.env.NODE_ENV讀取值。
  3. cross-env是用來解決跨環(huán)境的。
  4. DefinePlugin用來設(shè)置全局變量,在業(yè)務(wù)代碼中通過process.env.xxx讀取值。

到了這里,關(guān)于webpack中mode、NODE_ENV、DefinePlugin、cross-env的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • nodejs:非docker下設(shè)置NODE_ENV

    參考: ????????使用process.env.NODE_ENV的正確姿勢 - 掘金

    2024年02月13日
    瀏覽(18)
  • vite4生產(chǎn)環(huán)境打包報錯NODE_ENV=production is not supported in the .env file.

    vite4生產(chǎn)環(huán)境打包報錯NODE_ENV=production is not supported in the .env file.

    vue3+vite4生產(chǎn)環(huán)境production打包報錯: 大致意思就是: NODE_ENV=.ENV文件中不支持生產(chǎn)。僅支持NODE_ENV=開發(fā)來創(chuàng)建項目的開發(fā)構(gòu)建。如果需要設(shè)置process.env.NODE_env,則可以在Vite配置中進(jìn)行設(shè)置。 ** ** 如果有警告 那就把vite.config.js里面的minify換成:terser(別忘記install下載了)

    2024年02月11日
    瀏覽(128)
  • Webpack5 DefinePlugin的作用

    在Webpack 5中,DefinePlugin是一個插件,用于創(chuàng)建全局常量,這些常量可以在編譯過程中被引用。它的作用是允許開發(fā)人員在代碼中定義全局變量,這些變量在構(gòu)建過程中將被替換為其對應(yīng)的值。 DefinePlugin并不是必須的,但它是一個非常有用的插件,在某些情況下可以幫助我們優(yōu)

    2024年02月16日
    瀏覽(19)
  • 在vite或者vue-cli中使用.env[mode]環(huán)境變量

    在vite或者vue-cli中使用.env[mode]環(huán)境變量

    在項目中總會遇到一些默認(rèn)的配置,需要我們配置到靜態(tài)文件中方便我們?nèi)カ@取,這時候就可以用到這個.env環(huán)境變量文件,在cli創(chuàng)建的項目中頂層的nodejs會有一個process對象,這個對象可以根據(jù)不同的環(huán)境獲取不同的環(huán)境配置文件,但是vite中獲取變量的方式不一樣。 創(chuàng)建變量文件

    2024年02月06日
    瀏覽(563)
  • webpack 5 mode的作用和區(qū)別

    通過選擇? development ,? production ?或? none ?之中的一個,來設(shè)置? mode ?參數(shù),你可以啟用 webpack 內(nèi)置在相應(yīng)環(huán)境下的優(yōu)化。其默認(rèn)值為? production 。 會將? DefinePlugin ?中? process.env.NODE_ENV ?的值設(shè)置為? developmen或者production . 為模塊和 chunk 啟用有效的名。 例如js文件里面打印

    2024年02月03日
    瀏覽(20)
  • /usr/bin/env: node: 沒有那個文件或目錄

    /usr/bin/env: node: 沒有那個文件或目錄

    在安裝Elasticsearch-head插件的時候,我們需要先安裝node。 1、node在安裝好之后,使用以下命令建立了【軟連接】: 2、然后安裝好Elasticsearch-head之后,啟動Elasticsearch-head的時候報錯: 【軟連接】應(yīng)該到 /usr/bin 目錄下建立,而不是隨隨便便找個目錄進(jìn)行建立的。 1、刪除/opt/es/下

    2024年02月15日
    瀏覽(23)
  • 《基于 Vue 組件庫 的 Webpack5 配置》1.模式 Mode 和 vue-loader

    一定要配置 模式 Mode,這里有個小知識點,環(huán)境變量 process.env.NODE_ENV 一定要配置 vue-loader Vue Loader v15 現(xiàn)在需要配合一個 webpack 插件才能正確使用; 一個 webpack 的 loader,它允許你以一種名為單文件組件 (SFCs)的格式撰寫 Vue 組件; vue-loader 和 vue-template-compiler 要一起安裝,以保

    2024年02月11日
    瀏覽(48)
  • webpack.config.js配置文件報錯:The ‘mode‘ option has not been set

    報錯 WARNING in configuration The \\\'mode\\\' option has not been set, webpack will fallback to \\\'production\\\' for this value. Set \\\'mode\\\' option to \\\'development\\\' or \\\'production\\\' to enable defaults for each environment. You can also set it to \\\'none\\\' to disable any default behavior. Learn more: https://webpack.js.org/configuration/mode/ 解決: 在package.json文件

    2024年01月20日
    瀏覽(28)
  • Jenkins 安裝 NodeJS 插件后無法識別Node環(huán)境:env node No such file or directory

    經(jīng)驗證,該問題在使用Jenkins官方文檔中推薦的docker鏡像 jenkinsci/blueocean 才會出現(xiàn)。 改用最新的Jenkins docker鏡像就不會遇到: 我安裝的是最新的Jenkins docker鏡像: 然后運行鏡像: 注意 docker run 時,鏡像名為 jenkins/jenkins:lts ,而不是 jenkins/jenkins 。兩者不同。 為什么 jenkinsci/blu

    2024年02月07日
    瀏覽(73)
  • #! /usr/bin/env node 命令與 npm link 建立項目間軟連接

    #! /usr/bin/env node js 代碼… 這條指令通常出現(xiàn)在Node.js腳本文件的開頭,它的作用是用來指定該腳本文件使用 /usr/bin/env 來尋找并執(zhí)行 node 解釋器。這里的 node 即Node.js的執(zhí)行環(huán)境。 #!/usr/bin/env node 是Unix/Linux系統(tǒng)(包括Mac OS X)下的一個Shebang(#!)語法,用于指明腳本的解釋器。

    2024年04月22日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包