VUE 條件編譯


       —般情況下,C語言源程序中的每一行代碼.都要參加編譯。但有時候出於對程序代碼優化的考慮.希望只對其中一部分內容進行編譯.此時就需要在程序中加上條件,讓編譯器只對滿足條件的代碼進行編譯,將不滿足條件的代碼舍棄,這就是條件編譯(conditional compile)。 

                                                                                                                                                                                                                                                                                                                                                                         ----摘自百度百科

 

    條件編譯對於后端程序猿來說可能都比較熟悉,那么VUE項目可以條件編譯么? 答案是肯定的。 今天就把自己花了不少工夫的結論整理出來,供有需要的朋友參考。

 

               VUE項目要實現條件編譯需要三個基本的步驟   1 前置條件    2 配置   3 使用

 

                前置條件

                      2個插件

js-conditional-compile-loader
      一個條件編譯的webpack loader, 支持按條件構建各種代碼文件,如js、ts、vue、css、scss、html等。
cross-env
     運行跨平台設置和使用環境變量的腳本。

安裝插件
npm i -D js-conditional-compile-loader
npm i -D cross-env

 

        配置

                  vue.config.js

let timestamp = new Date().getTime(); //當前時間為了防止打包緩存不刷新,所以給每個js文件都加一個時間戳
// vue.config.js
module.exports = {
  //設置輸出目錄
  outputDir: process.env.ENV_CONFIG === "public" ? "distPublic" : "distPrivate", // 對webpack的設置,該對象將會被 webpack-merge 合並入最終的 webpack 配置。  configureWebpack: { output: { filename: `js/[name].${timestamp}.js`, // 每次構建打包時給文件名加上時間戳,確保每次版本更新的文件名不一樣 chunkFilename: `js/[name].${timestamp}.js`,  }, }, //更細粒度的控制其loader內部配置 chainWebpack: (config) => { let vueRule = config.module.rule('vue') vueRule .use("js-conditional-compile-loader") .loader("js-conditional-compile-loader") .tap(() => { return { // isDebug: process.env.NODE_ENV === "development", // optional, this expression is default development production public: process.env.ENV_CONFIG === "public", // any prop name you want, used for /* IFTRUE_public ...js code... FITRUE_public */  }; }) .end(); }, };

 

 

          package.json 

 

"scripts": {
    "serve": "cross-env ENV_CONFIG=public vue-cli-service serve",
    "build-public": "cross-env ENV_CONFIG=public vue-cli-service build",
    "build-private": "cross-env ENV_CONFIG=private vue-cli-service build",
    "lint": "vue-cli-service lint
 }

 

 

   使用

<template>
  <div class="hello">
    /*IFTRUE_public*/
    <div class="public">公有雲</div>
    /*FITRUE_public*/

    <div class="public private">私有雲</div>
  </div>
</template>

<script>
export default { mounted() { /*IFTRUE_public*/ console.log(1111111); /*FITRUE_public*/ console.log(2222222222); }, }; </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> /*IFTRUE_public*/ .public { color: red; } /*FITRUE_public*/ .private { font-size: 40px; } </style>

 


免責聲明!

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



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