参考:https://forum.vuejs.org/t/vue-cli-3-x-style/46306/3
vue.config.js添加配置
css: { sourceMap: false, modules: false, // 是否使用css分离插件 ExtractTextPlugin extract: false // // 开启 CSS source maps? // // sourceMap: false, // // css预设器配置项 // // loaderOptions: {}, // // 启用 CSS modules for all css / pre-processor files. // // modules: false },
参考:https://github.com/vuejs/vue-cli/issues/2051
vue.config.js添加
watchOptions: { poll: true },
参考
vue.config.js添加
hot: true, inline: true,
最终vue.config.js的配置如下

'use strict' const path = require('path') const defaultSettings = require('./src/settings.js') function resolve(dir) { return path.join(__dirname, dir) } const name = defaultSettings.title || 'vue Element Admin' // page title // If your port is set to 80, // use administrator privileges to execute the command line. // For example, Mac: sudo npm run const port = 9527 // dev port // All configuration item explanations can be find in https://cli.vuejs.org/config/ module.exports = { /** * You will need to set publicPath if you plan to deploy your site under a sub path, * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/, * then publicPath should be set to "/bar/". * In most cases please use '/' !!! * Detail: https://cli.vuejs.org/config/#publicpath */ publicPath: '/', outputDir: 'dist', assetsDir: 'static', lintOnSave: process.env.NODE_ENV === 'development', productionSourceMap: false, css: { sourceMap: false, modules: false, // 是否使用css分离插件 ExtractTextPlugin extract: false // // 开启 CSS source maps? // // sourceMap: false, // // css预设器配置项 // // loaderOptions: {}, // // 启用 CSS modules for all css / pre-processor files. // // modules: false }, devServer: { port: port, open: true, hot: true, inline: true, watchOptions: { poll: true }, overlay: { warnings: false, errors: true }, proxy: { // change xxx-api/login => mock/login // detail: https://cli.vuejs.org/config/#devserver-proxy [process.env.VUE_APP_BASE_API]: { target: `http://localhost:${port}/mock`, changeOrigin: true, pathRewrite: { ['^' + process.env.VUE_APP_BASE_API]: '' } } }, after: require('./mock/mock-server.js') }, configureWebpack: { // provide the app's title in webpack's name field, so that // it can be accessed in index.html to inject the correct title. name: name, resolve: { alias: { '@': resolve('src') } } }, chainWebpack(config) { const cdn = { // inject tinymce into index.html // why use this cdn, detail see https://github.com/PanJiaChen/tinymce-all-in-one js: ['https://cdn.jsdelivr.net/npm/tinymce-all-in-one@4.9.3/tinymce.min.js'] } config.plugin('html') .tap(args => { args[0].cdn = cdn return args }) config.plugins.delete('preload') // TODO: need test config.plugins.delete('prefetch') // TODO: need test // set svg-sprite-loader config.module .rule('svg') .exclude.add(resolve('src/icons')) .end() config.module .rule('icons') .test(/.svg$/) .include.add(resolve('src/icons')) .end() .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }) .end() // set preserveWhitespace config.module .rule('vue') .use('vue-loader') .loader('vue-loader') .tap(options => { options.compilerOptions.preserveWhitespace = true return options }) .end() config // https://webpack.js.org/configuration/devtool/#development .when(process.env.NODE_ENV === 'development', config => config.devtool('cheap-source-map') ) config .when(process.env.NODE_ENV !== 'development', config => { config .plugin('ScriptExtHtmlWebpackPlugin') .after('html') .use('script-ext-html-webpack-plugin', [{ // `runtime` must same as runtimeChunk name. default is `runtime` inline: /runtime..*.js$/ }]) .end() config .optimization.splitChunks({ chunks: 'all', cacheGroups: { libs: { name: 'chunk-libs', test: /[\/]node_modules[\/]/, priority: 10, chunks: 'initial' // only package third parties that are initially dependent }, elementUI: { name: 'chunk-elementUI', // split elementUI into a single package priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app test: /[\/]node_modules[\/]_?element-ui(.*)/ // in order to adapt to cnpm }, commons: { name: 'chunk-commons', test: resolve('src/components'), // can customize your rules minChunks: 3, // minimum common number priority: 5, reuseExistingChunk: true } } }) config.optimization.runtimeChunk('single') } ) } }
但是重点来了,按照上面的修改完成后,如果修改line.vue如下<style scoped> ...<style>中的样式,比如100%,浏览器还是不能热加载~~~~
但是重点来了,按照上面的修改完成后,如果修改line.vue如下<style scoped> ...<style>中的样式,比如100%,浏览器还是不能热加载~~~~
但是重点来了,按照上面的修改完成后,如果修改line.vue如下<style scoped> ...<style>中的样式,比如100%,浏览器还是不能热加载~~~~
<template> <div class="chart-container"> <chart height="100%" width="100%" /> </div> </template> <script> import Chart from '@/components/Charts/LineMarker' export default { name: 'LineChart1', components: { Chart } } </script> <style scoped> .chart-container{ position: relative; 10%; height: calc(100vh - 84px); } </style>
最终的解决办法,参考https://github.com/vuejs/vue-cli/issues/3480 这个怀疑是版本的问题,但是两个环节的webpack 都是4.29以下的版本,具体是4.28,于是决定版本回退,安装webpack 4.27.1,发现依旧没什么卵用,不能热加载,最后苦逼的对了下配置,发发现是是package.json中的如下版本导致的问题
"@vue/cli-plugin-babel": "3.5.3", "@vue/cli-plugin-eslint": "3.5.1", "@vue/cli-plugin-unit-jest": "3.5.3", "@vue/cli-service": "3.5.3",
正确的版本是,如下
"@vue/cli-plugin-babel": "3.6.0", "@vue/cli-plugin-eslint": "3.6.0", "@vue/cli-plugin-unit-jest": "3.6.3", "@vue/cli-service": "3.6.0",
所以最终的解决方案是:
1.在项目目录执行:npm install webpack@4.27.1 (会修改package.json)
2.修改上述cli-plugin-*的版本问3.6
其他参考