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

不同打包工具下的環(huán)境變量配置方式對比

這篇具有很好參考價值的文章主要介紹了不同打包工具下的環(huán)境變量配置方式對比。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文作者為 360 奇舞團(tuán)前端開發(fā)工程師 天明

前言

在現(xiàn)代的JavaScript應(yīng)用程序開發(fā)中,環(huán)境變量的配置是至關(guān)重要的。不同的應(yīng)用場景和部署環(huán)境可能需要不同的配置,例如開發(fā)、測試和生產(chǎn)環(huán)境。最常見的需求是根據(jù)不同的環(huán)境,配置如是否開啟sourceMap、API請求地址的切換、是否壓縮代碼等邏輯。本文主要介紹利用不同的工具:Webpack、Vite、Rollup打包項目的環(huán)境變量的配置方式。

process.env.NODE_ENV

process.env.NODE_ENV應(yīng)該是我們最熟悉的環(huán)境變量了,我們知道在Node環(huán)境中process是一個全局變量,無需require引入。process.env屬性返回一個包含用戶環(huán)境信息的對象,當(dāng)我們打印process.env時,發(fā)現(xiàn)它并沒有NODE_ENV這一個屬性。實際上process.env.NODE_ENV是在package.jsonscripts命令中注入的,可以通過以下方式進(jìn)行設(shè)置:

{
??"scripts":?{
????"dev":?"NODE_ENV=development?webpack?--config?webpack.dev.config.js",
????"prod":?"NODE_ENV=production?webpack?--config?webpack.prod.config.js"
??}
}

當(dāng)運行npm run devnpm run prod命令時,設(shè)置了NODE_ENV的不同值,項目中訪問到的process.env.NODE_ENV值也會根據(jù)執(zhí)行腳本的不同而分別取值:developmentproduction. 我們可以根據(jù)這個值的不同而分別進(jìn)行不同的配置,這就是配置環(huán)境變量的基本邏輯.

Webpack項目環(huán)境變量配置方式
使用DefinePlugin插件

前面提到,在scripts命令中注入的NODE_ENV只能被Webpack的構(gòu)建腳本訪問,而被Webpack打包的源碼中是無法訪問到的,此時可以借助WebpackDefinePlugin插件,創(chuàng)建全局變量。

const?webpack?=?require('webpack');

module.exports?=?{
??//.....其他配置
??plugins:?[
????new?webpack.DefinePlugin({
??????'process.env.API_URL':?JSON.stringify('https://api.example.com'),
??????'process.env.NODE_ENV':?JSON.stringify(process.env.NODE_ENV),
????}),
??],
};

在上面的示例中,我們定義了兩個環(huán)境變量:API_URLNODE_ENV,并且使用JSON.stringify將值轉(zhuǎn)換為字符串。這樣就可以在代碼中使用process.env.API_URLprocess.env.NODE_ENV來訪問這兩個環(huán)境變量的值了。

Windows平臺配置的注意點

Windows平臺下直接設(shè)置NODE_ENV =XXX是會報錯的, 解決辦法也很簡單,可以使用cross-env這個npm包來進(jìn)行配置,cross-env能夠提供一個設(shè)置環(huán)境變量的scripts,這樣我們就能夠以unix方式設(shè)置環(huán)境變量,然后在windows上也能夠兼容

  • 安裝

npm?install?cross-env?--save
  • 使用

"scripts":?{
??"dev":?"cross-env?NODE_ENV=development?webpack",
??"prod":?"cross-env?NODE_ENV=production?webpack"
}

可以看到直接在NODE_ENV=XXX前面添加cross-env就可以了。

使用dotenv插件

假如我們項目的環(huán)境變量有很多,全部設(shè)置plugins中既不美觀也不容易維護(hù),此時將環(huán)境變量配置在.env文件中,然后使用dotenv插件來加載.env配置文件。

  • 安裝

npm?install?dotenv-webpack?--save-dev
  • 創(chuàng)建環(huán)境變量文件 在項目根目錄下創(chuàng)建一個.env文件,如果有多種不同的環(huán)境,可以針對不同的環(huán)境創(chuàng)建不同的配置文件,例如可以使用.env.development、.env.test.env.production在文件來分別表示:開發(fā)、測試、生產(chǎn)環(huán)境的環(huán)境變量。在文件中配置每個環(huán)境對應(yīng)的變量:

//?.env.development
API_URL=http://development.example.com
DEBUG=true
//?.env.test
API_URL=http://test.example.com
DEBUG=true
//?.env.production
API_URL=http://production.example.com
DEBUG=false
  • 加載.env配置 在webpack.config.js加載.env配置:

require('dotenv').config({?path:?path.resolve(__dirname,?'.env.'?+?process.env.NODE_ENV)?})
  • 設(shè)置scriptsscripts命令中設(shè)置NODE_ENV

"scripts":?{
??"dev":?"cross-env?NODE_ENV=development?webpack",
??"dev":?"cross-env?NODE_ENV=test?webpack",
??"prod":?"cross-env?NODE_ENV=production?webpack"
}
Rollup項目環(huán)境變量配置方式

Rollup是一個現(xiàn)代化的JavaScript模塊打包工具,專注于構(gòu)建JavaScript庫和組件。下面是Rollup中配置環(huán)境變量的幾種常見方式:

使用rollup-plugin-replace

Rolluprollup-plugin-replace插件允許我們在打包過程中替換代碼中的字符串。我們常用該插件來定義環(huán)境變量。

  • 安裝:

npm?install?rollup-plugin-replace?--save-dev
  • rollup.config.js中配置

const?isProduction?=?process.env.NODE_ENV?===?'production';
export?default?[
????{
?????????//.....其他配置
????????plugins:?[
????????????replace({
????????????????'process.env.API_URL':?JSON.stringify(isProduction???'https://prod.example.cn'?:?'https://dev.example.cn')
????????????????'process.env.NODE_ENV':?JSON.stringify(isProduction??'production'?:?'development')

????????????})
????????]
????}
]

在上面的例子中,我們首先獲取到當(dāng)前組件庫的環(huán)境變量,并根據(jù)它的值設(shè)置不同的API_URLNODE_ENV.

之所以在組件庫中使用rollup-plugin-replace?替換?process.env.NODE_ENV?的原因是為了在打包時,將代碼中的環(huán)境變量替換為實際的值,以便在不同的環(huán)境中正確地運行組件庫。這樣就避免了宿主工程中的環(huán)境變量process.env.NODE_ENV,對組件庫環(huán)境變量的影響。

Rollup使用dotenv插件

Webpack類似,在Rollup中使用dotenv插件進(jìn)行環(huán)境變量的配置,可以按照以下步驟進(jìn)行:

  • 安裝dotenvrollup-plugin-replace

npm?install?dotenv?rollup-plugin-replace?--save-dev
  • 創(chuàng)建環(huán)境變量文件 與上面的Webpack創(chuàng)建環(huán)境變量文件類似,這里也可以創(chuàng)建多個環(huán)境配置文件.env.development.env.test,.env.production

  • rollup.config.js加載.env配置

import?{?config?}?from?'dotenv'
config({?path:?".env."+?process.env.NODE_ENV?}).parsed
export?default?{
??//?...
??plugins:?[
????replace({
??????process.env.API_URL:?JSON.stringify(process.env.API_URL),
??????process.env.DEBUG:?JSON.stringify(process.env.DEBUG),
????}),
????//?...
??],
};

在上例中,我們首先通過dotenv.config()方法來加載.env文件中的環(huán)境變量。然后,使用@rollup/plugin-replace插件的replace方法,將環(huán)境變量注入到代碼中。

  • package.json中設(shè)置scripts

"scripts":?{
????"build:dev":?"cross-env?NODE_ENV=development?rollup?-c",
????"build:prod":?"cross-env?NODE_ENV=production?rollup?-c",
????"build:test":?"cross-env?NODE_ENV=test?rollup?-c",
????"dev":?"cross-env?NODE_ENV=development?rollup?-c?-w",
??}

執(zhí)行對應(yīng)的腳本命令后,在你的代碼中,你可以通過process.env.XXX來訪問已配置的環(huán)境變量.

Vite項目環(huán)境變量配置方式

與使用Webpack或是Rollup項目配置環(huán)境變量相比,Vite項目配置環(huán)境變量較為簡單。

內(nèi)建變量

Vite在一個特殊的import.meta.env對象上暴露環(huán)境變量

  • import.meta.env.MODE: 應(yīng)用運行的模式。

  • import.meta.env.BASE_URL:部署應(yīng)用時的基本 URL。他由base 配置項決定。

  • import.meta.env.PROD:應(yīng)用是否運行在生產(chǎn)環(huán)境。

  • import.meta.env.DEV:應(yīng)用是否運行在開發(fā)環(huán)境 (永遠(yuǎn)與 import.meta.env.PROD相反)。

  • import.meta.env.SSR:應(yīng)用是否運行在 server 上。 這些變量可以直接在代碼中訪問

.env文件

同樣在項目的根目錄下,根據(jù)環(huán)境的不同創(chuàng)建不同的配置文件,不過文件的命名有些特殊性:

.env????????????????#?所有情況下都會加載
.env.local??????????#?所有情況下都會加載,但會被?git?忽略
.env.[mode]?????????#?只在指定模式下加載
.env.[mode].local???#?只在指定模式下加載,但會被?git?忽略

加載的環(huán)境變量也會通過 import.meta.env 以字符串形式暴露給客戶端源碼。

注意:為了防止意外地將一些環(huán)境變量泄漏到客戶端,只有以VITE_為前綴的變量才會暴露給經(jīng)過vite處理的代碼。

模式

默認(rèn)情況下,開發(fā)服務(wù)器 dev命令 運行在 development模式,而build命令則運行在production模式。這意味著當(dāng)執(zhí)行vite build 時,它會自動加載.env.production中可能存在的環(huán)境變量.在某些情況下,若想在vite build時運行不同的模式,你可以通過傳遞 --mode 選項標(biāo)志來覆蓋命令使用的默認(rèn)模式。

vite?build?--mode?development

此時vite會使用.env.development文件下環(huán)境變量進(jìn)行構(gòu)建。

總結(jié)

通過對比發(fā)現(xiàn)雖然打包工具不同,但是配置環(huán)境變量的方式都大同小異,合理的使用環(huán)境變量,能夠提高我們代碼的靈活性、安全性、可維護(hù)性,并且將配置信息與代碼分離是一種良好的開發(fā)實踐,可以使應(yīng)用程序更易于維護(hù)和管理。

參考:

https://cn.vitejs.dev/guide/env-and-mode.html

https://webpack.docschina.org/plugins/define-plugin/

https://cn.rollupjs.org/faqs/

-?END?-

關(guān)于奇舞團(tuán)

奇舞團(tuán)是 360 集團(tuán)最大的大前端團(tuán)隊,代表集團(tuán)參與 W3C 和 ECMA 會員(TC39)工作。奇舞團(tuán)非常重視人才培養(yǎng),有工程師、講師、翻譯官、業(yè)務(wù)接口人、團(tuán)隊 Leader 等多種發(fā)展方向供員工選擇,并輔以提供相應(yīng)的技術(shù)力、專業(yè)力、通用力、領(lǐng)導(dǎo)力等培訓(xùn)課程。奇舞團(tuán)以開放和求賢的心態(tài)歡迎各種優(yōu)秀人才關(guān)注和加入奇舞團(tuán)。

不同打包工具下的環(huán)境變量配置方式對比文章來源地址http://www.zghlxwxcb.cn/news/detail-796582.html

到了這里,關(guān)于不同打包工具下的環(huán)境變量配置方式對比的文章就介紹完了。如果您還想了解更多內(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)文章

  • vue啟動配置npm run serve,動態(tài)環(huán)境變量,根據(jù)不同環(huán)境訪問不同域名

    vue啟動配置npm run serve,動態(tài)環(huán)境變量,根據(jù)不同環(huán)境訪問不同域名

    首先創(chuàng)建不同環(huán)境的配置文件,比如域名和一些常量,創(chuàng)建一個env文件,先看看文件目錄 env.dev就是dev環(huán)境的域名,.test就是test環(huán)境域名,其他同理,然后配置package.json文件 scripts里面就是我們的運行配置,當(dāng)我們執(zhí)行npm run dev的時候就會讀取env.dev文件里面的配置,其他同理,

    2024年02月12日
    瀏覽(25)
  • uniapp 小程序不同環(huán)境下編譯的變量配置

    官網(wǎng)地址:概述 | uni-app官網(wǎng) uni-app 通過在 package.json 文件中增加 uni-app 擴(kuò)展節(jié)點,實現(xiàn)自定義條件編譯,例如要發(fā)行最新的小程序,可能需要手動修改一些生產(chǎn)與開發(fā)環(huán)境的不同ip地址等,通過此配置條件,實現(xiàn)自動編譯 ?在json文件中新增一項? uni-app 這里將環(huán)境變量設(shè)置為兩個

    2024年02月13日
    瀏覽(16)
  • Node-v14.20.0 Windows下的環(huán)境變量配置

    1. Node.js 下載與安裝 1.1 下載 Node.js 并一路默認(rèn)安裝到 D:DevEnvnodejs 中 1.2 環(huán)境變量配置 1.3 淘寶鏡像加速

    2024年02月07日
    瀏覽(27)
  • Gin框架: 使用go-ini配置參數(shù)與不同環(huán)境下的配置部署

    關(guān)于 INI 配置文件與go-ini 1 )概述 在INI配置文件中可以處理各種數(shù)據(jù)的配置 INI文件是一種簡單的文本格式,常用于配置軟件的各種參數(shù) go-ini 是地表 最強(qiáng)大、最方便 和 最流行 的 Go 語言 INI 文件操作庫 Github 地址:https://github.com/go-ini/ini 官方文檔: https://ini.unknwon.io/ 使用示例

    2024年02月22日
    瀏覽(32)
  • vue-cli4 配置不同開發(fā)環(huán)境打包命令

    為什么會需要配置多種環(huán)境變量? 在一個產(chǎn)品的開發(fā)過程中,一般來說都是會經(jīng)歷這么一個過程: 本地開發(fā) → 測試版部署 → 測試 → 預(yù)上線 → 正式上線 。對應(yīng)的每一個環(huán)節(jié)中的服務(wù)器地址,接口地址...都會不一樣。那么我們需要怎么去處理這種情況。 #1. 創(chuàng)建文件 在

    2024年02月16日
    瀏覽(90)
  • vue項目(vue-cli)配置環(huán)境變量和打包時區(qū)分開發(fā)、測試、生產(chǎn)環(huán)境

    在自定義配置Vue-cli 的過程中,想分別通過.env.development .env.test .env.production 來代表開發(fā)、測試、生產(chǎn)環(huán)境。 本來想使用上面三種配置來區(qū)分三個環(huán)境,但是發(fā)現(xiàn)使用test來打包后在測試環(huán)境會報錯,報錯信息: Uncaught ReferenceError: exports is not defined 本來以為真的是程序出現(xiàn)什么

    2023年04月08日
    瀏覽(228)
  • docker使用環(huán)境變量的方式動態(tài)配置nginx

    使用docker部署nginx時,由于nginx配置文件里面的一些ip和端口是隨著環(huán)境變化而改變的,即在 不同的環(huán)境 里,使用的 ip和端口都不一樣 。這就導(dǎo)致每次部署到新環(huán)境時,都要重新編寫配置文件,再制作成新的鏡像,比較繁瑣。 所以我想要制作一個通用的鏡像,將ip和端口設(shè)置

    2024年02月09日
    瀏覽(22)
  • 同時安裝多個JDK的環(huán)境變量配置及切換方式

    同時安裝多個JDK的環(huán)境變量配置及切換方式

    前言 我們在日常的java開發(fā)過程中,JDK的配置永遠(yuǎn)是繞不開的問題。假設(shè)你是一個學(xué)生,你在電腦上安裝配置了一個1.6版本jdk,然后因為下載的其他軟件導(dǎo)致版本不兼容或者其他的原因需要你將jdk的版本換成1.8,但你又不想刪除之前的1.6版本;又或者你是一名剛?cè)肼毜膯T工,

    2023年04月14日
    瀏覽(29)
  • 【Vue3實踐】(六)Vue3使用vite處理環(huán)境變量、打包部署、nginx配置

    【Vue3實踐】(六)Vue3使用vite處理環(huán)境變量、打包部署、nginx配置

    由于在日常開發(fā)中會有一部分前端的開發(fā)任務(wù),會涉及到Vue的項目的搭建、迭代、構(gòu)建發(fā)布等操作,所以想系統(tǒng)的學(xué)習(xí)一下Vue相關(guān)的知識點,本專題會依照Vue的搭建、開發(fā)基礎(chǔ)實踐、進(jìn)階用法、打包部署的順序進(jìn)行記錄。 歷史文章鏈接如下: 《Vue3搭建、路由配置與基本語法

    2023年04月08日
    瀏覽(646)
  • 關(guān)于克拉美羅下界(CRLB)-及不同DOA估計算法下的方差(性能)對比

    關(guān)于克拉美羅下界(CRLB)-及不同DOA估計算法下的方差(性能)對比

    ? ? 參數(shù)估計 在科研、工程乃至生活中都有廣泛的應(yīng)用。參數(shù)估計要解決的問題簡單來說就是:基于一組觀測數(shù)據(jù),通過某種方法來獲得我們想要的,與觀測數(shù)據(jù)相關(guān)的一個或多個參數(shù)。 ? ? 克拉美-羅界(Cramr-Rao Bound, CRB) 是 無偏估計 里我們常用的且十分重要的 一種對不同

    2024年04月13日
    瀏覽(221)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包