zoukankan      html  css  js  c++  java
  • vue-element-admin开发模式下style标签热更新失效[解决办法]

    参考: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')
            }
          )
      }
    }
    View Code

    但是重点来了,按照上面的修改完成后,如果修改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

    其他参考

    https://github.com/vuejs/vue-cli/issues/3480

  • 相关阅读:
    redis相关
    Ubuntu安装之python开发
    Shell编程实战
    saltstack高效运维
    docker网络
    docker入门
    python学习博客地址集合。。。
    vue+uwsgi+nginx部署路飞学城
    部署你的CRM程序
    Java Netty教程(目录)
  • 原文地址:https://www.cnblogs.com/robinunix/p/10868879.html
Copyright © 2011-2022 走看看