真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Node項目怎么配置環(huán)境并讓其支持可擴展

這篇文章主要為大家展示了“Node項目怎么配置環(huán)境并讓其支持可擴展”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Node項目怎么配置環(huán)境并讓其支持可擴展”這篇文章吧。

專業(yè)從事成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè),高端網(wǎng)站制作設(shè)計,微信小程序定制開發(fā),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊竭力真誠服務(wù),采用H5技術(shù)+CSS3前端渲染技術(shù),響應(yīng)式網(wǎng)站建設(shè),讓網(wǎng)站在手機、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。

因Node項目開發(fā)的較少沒涉及到環(huán)境變量切換,但是經(jīng)常做前端項目開發(fā)總是會遇到,比如在Vue的項目可以配置.env.xxx.xxx并要求環(huán)境變量的配置要以VUE_APP_開頭,Why?,我們就一起來探索一下Vue項目的環(huán)境變量是怎么加載并解析的,我們再移植到Node項目中。

探索Vue中環(huán)境配置的加載:

先來看看Vue CLI關(guān)于模式和環(huán)境變量的說明,我們看到有這么一段話:想要了解解析環(huán)境文件規(guī)則的細(xì)節(jié),請參考 dotenv。我們也使用 dotenv-expand 來實現(xiàn)變量擴展 (Vue CLI 3.5+ 支持)。我們先用Vue Cli來創(chuàng)建一個Vue項目。

探索第一步:

package.json中通過執(zhí)行scripts的命令都使用到了@vue/cli-service

Node項目怎么配置環(huán)境并讓其支持可擴展

探索第二步:

@vue/cli-service包確實安裝了官網(wǎng)提示的兩個依賴包,并在bin目錄下的vue-cli-service.js文件中找到了關(guān)鍵類Service。

Node項目怎么配置環(huán)境并讓其支持可擴展

探索第三步:

  • Service中我們找到了加載環(huán)境配置的關(guān)鍵函數(shù),其中的兩個path分別指:.env.mode.env.mode.local,也就是我們的環(huán)境變量文件可以支持帶.local也可以不帶。

  • 思考load兩次的作用?

Node項目怎么配置環(huán)境并讓其支持可擴展

探索第三步:

  • 指定的前綴是怎么回事?我們在util目錄下找到了答案:resolveClientEnv.js,最終是由DefinePlugin插件加載到了全局的配置中。

  • 思考BASE_URL的設(shè)置?

Node項目怎么配置環(huán)境并讓其支持可擴展

Node項目怎么配置環(huán)境并讓其支持可擴展

為攜帶webpack的Node項目中增加環(huán)境配置

準(zhǔn)備webpack項目環(huán)境

準(zhǔn)備webpack.config.js

Node項目怎么配置環(huán)境并讓其支持可擴展

新增env-helper.js,我們一起來實現(xiàn)一下:

必備依賴裝一下

npm install dotenv --save
npm install dotenv-expand --save

解析環(huán)境變量文件

/**
 * 解析環(huán)境變量文件
 * @param {*} mode
 */
const loadEnv = (mode) => {
  const basePath = path.resolve(__dirname, `.env${mode ? `.${mode}` : ``}`);
  const localPath = `${basePath}.local`;

  const load = (envPath) => {
    try {
      const env = dotenv.config({ path: envPath, debug: process.env.DEBUG });
      dotenvExpand(env);
    } catch (err) {
      if (err.toString().indexOf("ENOENT") < 0) {
        console.error(err);
      }
    }
  };

  load(localPath);
  load(basePath);
};

符合前綴的環(huán)境變量對象

將符合正則條件的和特殊的進(jìn)行整合后返回,通過注入到DefinePlugin插件中。

/**
 * 獲取符合前綴規(guī)則的環(huán)境變量對象
 */
const prefixRE = /^XXTX_APP_/;
const resolveClientEnv = () => {
  const env = {};
  Object.keys(process.env).forEach((key) => {
    if (prefixRE.test(key) || key === "NODE_ENV") {
      env[key] = process.env[key];
    }
  });
  return env;
};

升級webpack.config.js來演示環(huán)境變量讀取

增加演示插件和NODE_ENV配置

const webpack = require("webpack");
const { loadEnv, resolveClientEnv } = require("./env-helper");
// 解析環(huán)境配置文件
// 通過cross-env 再scripts中配置NODE_ENV=development
loadEnv(process.env.NODE_ENV);
// 獲取符合規(guī)則的環(huán)境配置對象
const env = resolveClientEnv();

const HelloWorldPlugin = require("./hello-world");

module.exports = {
  mode: "development",
  plugins: [
    new webpack.DefinePlugin(env),
    new HelloWorldPlugin({ options: true }),
  ],
};

在我們的webpack插件中使用環(huán)境變量

class HelloWorldPlugin {
  apply(compiler) {
    compiler.hooks.done.tap("HelloWorldPlugin", () => {
      console.log("Hello World!");
      console.log("[ XXTX_APP_NAME ] >", process.env.XXTX_APP_NAME);
      console.log("[ XXTX_APP_BASE_URL ] >", process.env.XXTX_APP_BASE_URL);
    });
  }
}

module.exports = HelloWorldPlugin;

查看輸出結(jié)果

Node項目怎么配置環(huán)境并讓其支持可擴展

以上是“Node項目怎么配置環(huán)境并讓其支持可擴展”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當(dāng)前文章:Node項目怎么配置環(huán)境并讓其支持可擴展
轉(zhuǎn)載源于:http://weahome.cn/article/jjpcgp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部