安装
npm i -D js-conditional-compile-loader
配置webpack
webpack.base.conf.js文件中在rules配置编译条件如下
module: {
rules: [
{
test: /\.js$/,
include: [resolve('src'), resolve('test')],
use: [
//step-2
'babel-loader?cacheDirectory',
//step-1
{
loader: 'js-conditional-compile-loader',
options: {
isDebug: process.env.NODE_ENV === 'development', // optional, this is default
isHK: process.env.npm_config_hk, // any name, used for /* IFTRUE_isHK ...js code... FITRUE_isHK */
}
},
]
},
//other rules
]
}
插件支持IFDEBUG和IFTRUE两个条件编译指令。用法是:在js代码的任意地方以/*IFDEBUG或/*IFTRUE_xxx开头,以FIDEBUG*/或FITRUE_xxx*/结尾,中间是被包裹的js代码。xxx是在webpack中指定的条件属性名,如上面的isHK。
在项目代码中设置如下
{ name: '用户部门', value: 'usrDepartId' },
/* IFTRUE_isHK */
{ name: '舱门管理', value: 'id' },
/* FITRUE_isHK */
{ name: '手机号', value: 'telphone' },
在终端输入**npm run dev –hk**
可以看到舱门管理
在终端输入**npm run dev**
可以看到舱门管理被隐藏
问题来了,样式的条件编译我想用以下两个方式实现,都遇到了问题,请大神指点:
对vue接触时间较短,框架底层不了解,不知道怎么进行设置,在线等
进行如下设置后,样式的条件编译无法实现
{
test: /\.(css|html|vue)(\?.*)?$/,
// loader: 'style-loader!css-loader',
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')],
use: [
//step-2
'babel-loader?cacheDirectory',
//step-1
{
loader: 'css-loader',
options: {
isDebug: process.env.NODE_ENV === 'development', // optional, this is default
envTest: process.env.ENV_CONFIG === 'test',
isHK: process.env.npm_config_hk,
isNT: process.env.npm_config_nt, // any name, used for /* IFTRUE_ntFlag ...js code... FITRUE_ntFlag */ npm run build-demo --nt
}
},
]
},
比如设置全局变量 versionType为1或2
执行 npm run dev --hk 时versionType为1
执行 npm run dev --nt 时versionType为2
问题来了,在终端执行 npm run dev –hk 时,在哪设置全局变量versionType=1(执行不同分支代码,实现1hk、2nt)
以下代码为全局变量,需要在哪设置:
/* IFTRUE_isHK */
Var versionType=1,
/* FITRUE_isHK */
/* IFTRUE_isNT */
Var versionType=2,
/* FITRUE_isNT */
想要实现样式的条件编译,用的vue+element ui
比如同一套代码,有个列表显示数据不一致,修改内容的时候文本框内容不一致
更新,找了一些资料,最终解决方案是设置 全局变量,然后通过条件渲染实现样式的条件编译
要实现样式的条件编译,您可以使用Vue的计算属性和三元表达式,根据不同的条件返回不同的样式。具体步骤如下:
<template>
<div :class="computedClass"></div>
</template>
<script>
export default {
data() {
return {
isActive: true // 条件
}
},
computed: {
computedClass() {
return this.isActive ? 'active-class' : 'inactive-class'
}
}
}
</script>
<style>
.active-class {
background-color: red;
}
.inactive-class {
background-color: blue;
}
</style>
在这个例子中,我们创建了一个名为computedClass
的计算属性,该属性根据isActive
的值返回不同的类名。如果isActive
为true
,返回active-class
,否则返回inactive-class
。
<template>
<div :class="computedClass" :style="{ color: textColor }"></div>
</template>
<script>
export default {
data() {
return {
isActive: true,
textColor: '#000' // 条件
}
},
computed: {
computedClass() {
return [
this.isActive ? 'active-class' : 'inactive-class',
this.textColor === '#000' ? 'black-text' : 'white-text',
]
}
}
}
</script>
<style>
.active-class {
background-color: red;
}
.inactive-class {
background-color: blue;
}
.black-text {
color: #000;
}
.white-text {
color: #fff;
}
</style>
在这个例子中,我们使用了computedClass
这个计算属性,并在这个计算属性中返回一个数组,数组中包含了需要动态添加的类名。我们还使用了:style
指令,并在其中使用了一个变量textColor
来指定文本颜色。如果textColor
为#000
,则返回black-text
类名,表示文本为黑色,否则返回white-text
类名,表示文本为白色。
综上所述,以上是在Vue和Element UI中实现样式的条件编译的基本步骤。您可以根据具体需求进行调整,并尝试使用其他样式变量和特性来实现更高级的功能。