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