vue 4.0项目搭建

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
喜欢就支持一下吧
点赞0 分享