將本地網絡地址 動態寫入Vue項目的process.env


 首先我們先利用 nodejs 動態的拿到本地網絡地址。這里使用的是 os.networkInterfaces(),大家可以參考官網,或者自己寫個demo,在控制台打印輸出一下。

const os = require("os");
var ifaces = os.networkInterfaces();
let networkAddress = ifaces["en0"][1]["address"];

 到這里我們已經拿到了本地的網絡地址,那么我們將其寫入Vue項目。

方法一:

  關於Vue項目,我們可以在Vue項目的根目錄下面創建 .env 文件,然后在里面將我們的網絡地址寫入,那么在Vue項目里面就能拿到了,不過需要我們指定 NODE_ENV (項目的運行環境)。

  通常是使用 .env.development 來配置開發環境的靜態資源(NODE_ENV 為 development ) 

       .env.production 來配置線上環境的靜態資源(NODE_ENV 為 production )。

  但是我們需要在配置的靜態資源時加上 VUE_APP_  前綴。我們可以參考下官網的Vue環境變量

  其實我們可以在 .env 文件里面配置很多的靜態資源,不僅僅只是這里討論的網絡地址。實際開發大多是用來配置接口地址。

  那么現在我們可以寫入靜態資源,但是不能動態寫入。所以提供一個思路,我們可以在項目啟動前,利用nodejs的 fs 模塊將以下的代碼寫入到 .env 文件中,那么 .env 文件中就是我們想要的值了。但是這樣做會導致只要換了網絡就會修改 .env 文件。

  .env.development 文件示例

NODE_ENV = "development"
VUE_APP_BASE_URL = "http://www.baidu.com"

 

方法二:

  前置知識:

  1.全局CLI全配置:vue.config.js  

  2.Vue自定義webpack vue.config.js配置webpack

 

  接下來就是我們的實際操作了,Vue項目啟動之前會先執行 vue.config.js ,拿到項目打包的配置,在進行項目的構建。因此我們可以在 vue.config.js 中執行上面nodejs的方法 拿到動態網絡地址。然后我們通過自定義webpack 將動態網絡寫入到項目的 process.env 中。至於我們要修改哪一項的webpack配置,那么就需要我們去查看Vue打包項目的webpack配置。

  這里以Vue2.0為例子,先進入到Vue項目根目錄,然后打開終端輸入 以下兩行代碼就可以拿到開發環境和生產環境的打包配置了。

// mode 指定模式是 開發還是生產 , 后面是輸出文件的目錄
// 開發環境打包配置
vue inspect --mode=deveplment > webpack.dev.js
// 生產環境打包配置
vue inspect --mode=deveplment > webpack.dev.js

  拿到打包配置之后,我們可以發現 process.env 是在 DefinePlugin 中配置的,那么我們只需要自定義 define 這個插件就好了 。

  Vue的webpack配置文件還貼心的把需要自定義修改插件時,插件的名字告訴我們了。

 

   最后我們來編寫代碼實現,我們的需求。

// 這里主要配置開發環境的端口號,避免重復
// ref    https://cli.vuejs.org/zh/config/#vue-config-js

// 獲取當前的網絡地址
const os = require("os");
var ifaces = os.networkInterfaces();
let networkAddress = ifaces["en0"].filter(item => item.family === "IPv4")[0].address;
const PORT = 2233;
const SERVE_PATH = `"http://${networkAddress}:${PORT}"`;

module.exports = {
  devServer: {
    open: true,
    port: 8090,
    https: false,
    hotOnly: false
  },
  // 自定義Vue打包插件的配置
  // 這里主要目的是 把 SERVE_PATH 寫入到 process.env(可以修改 process.env)
  chainWebpack: config => {
    // args 是一個數組,返回值也必須是一個數組
    config.plugin("define").tap(args => {
      //   console.log("define", args);
      let newProcessEnv = { ...args[0]["process.env"], SERVE_PATH };
      return [{ "process.env": newProcessEnv }];
    });
  }
};

 

  現在我們就可以在項目中去使用process.env中的 SERVE_PATH了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM