vue 4.0项目搭建
1. 首先正常搭建项目:选用的是2.x模板
2. 添加vue.config.js(基础版)
const path = require('path')
// const fs = require('fs')
function resolve(dir) {
return path.join(__dirname, dir)
}
module.exports = {
publicPath: './', // 公共,基本路径
outputDir: process.env.NODE_ENV === "development" ? 'devdist' : 'dist', // 输出文件目录,不同的环境打不同包名
assetsDir: './', // 资源路径
chainWebpack: config => { // 路径别名
config.resolve.alias
.set('@', resolve('src'))
.set('@images', resolve('src/assets/images'))
},
devServer: {
port: 8080,
host: "localhost", // 0.0.0.0
open: true, // 配置自动启动浏览器
overlay: {
warnings: true,
errors: true
},
// 配置代理,
proxy: {
"/devProxy": {
target: 'http://192.168.122.100:20105/dms/',
changeOrigin: true
},
},
}
}
复制代码
3. 关于less的使用,以及less全局变量的使用
注意:这里有多种实现方式,例如sass-resource-loader、style-resources-loader、vue-cli-plugin-style-resources-loader等,这里选择了最简单的方式,即不使用任何其他插件,直接最初项目搭建的时候就添加了css预处理器less、lessloader
vue.config.js中module.exports中添加:
css: {
loaderOptions: {
less: {
javascriptEnabled: true,
globalVars: {
hack: `true; @import '~@/styles/variable.less';`
},
}
}
},
复制代码
这里hack:true
;后为导入需要全局声明的less文件
4. webpack-theme-color-replacer换肤
webpack-theme-color-replacer是一个webpack插件,跟vue关系不大;其核心逻辑是通过js替换颜色路径等内容,和传统更换css类等不一样;简单使用方式如下:
vue.config.js中module.exports中添加:
// 自定义换肤
config.plugin('webpack-theme-color-replacer')
.use(ThemeColorReplacer)
.tap(options => {
options[0] = {
matchColors: ['#406767', '#3a6a6b', '#232323'], // 需要全css查找的颜色数组, 支持 rgb and hsl.
fileName: 'css/theme-colors-[contenthash:8].css', //optional. output css file name, suport [contenthash] and [hash].
injectCss: false, // optional. Inject css text into js file, no need to download `theme-colors-xxx.css` any more.
isJsUgly: process.env.NODE_ENV!=='development', }
return options
})
复制代码
提供换肤功能的组件中:可以通过client.changer.changeColor(options, Promise).then(() => {})来实现换肤,以下为提供的mixin例子
// 供换肤功能使用,可用于替换颜色,路径等,具体为options内参数
import client from 'webpack-theme-color-replacer/client'
export default {
data() {
return {
exampleOptions: {
newColors: ['#04cf04', '#04cf04', '#1d1d1d']
}
}
},
methods: {
_switchColor(options) {
client.changer.changeColor(options, Promise).then(() => {
this.$Message.success('切换颜色成功')
localStorage.setItem('nowSkin', JSON.stringify(options))
})
}
},
created() {
let skin = localStorage.getItem('nowSkin') ? JSON.parse(localStorage.getItem('nowSkin')) : {};
if(!this.$commonjs.objectEmpty(skin)){
this.nowSkin = skin
}
client.changer.changeColor(this.nowSkin).then(() => {})
}
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END