zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Linux基础知识
    redis info
    记录: 解决 pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)
    IOS IAP 自动续订 之 利用rabbitmq延时队列自动轮询检查是否续订成功
    Python3.6 的字典为什么会快
    IAP 订阅后端踩坑总结之 Google 篇
    docker 命令合集
    Python Schema使用说明
    Apache Bench测试
    channels2.X 学习笔记
  • 原文地址:https://www.cnblogs.com/saodiseng2015/p/14899993.html
Copyright © 2011-2022 走看看