问答

webpack 打包vue文件的时候 vue文件中的style样式不生效

作者:admin 2021-04-22 我要评论

package.json代码 { "name": "coment", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
  1. package.json代码
{
  "name": "coment",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack"
  },
  "author": "",
  "devDependencies": {
    "file-loader": "^6.2.0",
    "less": "^4.1.1",
    "less-loader": "^8.0.0",
    "style-loader": "^2.0.0",
    "url-loader": "^4.1.1",
    "vue-template-compiler": "^2.6.12",
    "webpack": "^5.23.0",
    "webpack-cli": "^4.5.0"
  },
  "dependencies": {
    "@babel/core": "^7.2.0",
    "@babel/preset-env": "^7.12.17",
    "babel-loader": "^8.0.0-beta.0",
    "css-loader": "^5.0.2",
    "vue": "^2.6.12",
    "vue-loader": "^14.2.2",
    "vue-style-loader": "^4.1.2"
  }
}

2.Vue文件代码

<template>
  <div>
    <h2 class="title">{{message}}</h2>
    <button @click="btnClick">按钮</button>
    <h2>{{name}}</h2>
    <Cpn/>
  </div>
</template>

<script>
  import Cpn from './Cpn'

  export default {
    name: "App",
    components: {
      Cpn
    },
    data() {
      return {
        message: 'Hello Webpack',
        name: 'coderwhy'
      }
    },
    methods: {
      btnClick() {

      }
    }
  }
</script>

<style scoped>
  .title {
    color: green;
  }
</style>

3.webpack.config.json代码

const path = require("path")


module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: "bundle.js"
    //publicPath:"dist/" 配置文件默认路径
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        //使用loder时是从右向左的
        use: ['vue-style-loader','style-loader' ,'css-loader']
      },
      {
        test: /\.less$/,
        use: [{loader:"vue-style-loader"},{
          loader: "style-loader"
        }, {
          loader: "css-loader"
        }, {
          loader: "less-loader"
        }]
      },
      {
        test: /\.(png|jpg|gif|jpeg)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              //限制文件大小
              //当加载图片小于limit时,会将图片编译为base64字符串格式,大于limit时需要使用file-loader进行加载
              limit: 8196,
              name: 'img/[name].[hash:8].[ext]'
            }
          }
        ]
      },
      {
        test: /\.js$/,
        //exclube 排除
        //include 包含
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env']
          }
        }
      },
      {
        test:  /\.vue$/,
        use:  ['vue-loader']
      }
    ]

  },
  resolve: {
    //alias 别名
    extensions: ['.js', '.css', '.vue'],
    alias: {
      'vue$': "vue/dist/vue.esm.js"
    }
  }
}

最后附上效果图![上传中...]()
image
希望各位大佬行行好,帮我看一下到底问题出在那

###
//使用loder时是从右向左的
use: ['vue-style-loader','style-loader' ,'css-loader']

写错了
既然你都注释了从右往左,正确的解析应该是:
先用 vue-loader 来解析 .vue 的样式转成 css
然后是 css-loader 解析 css 样式
再然后是 style-loadercss 加到 html
所以正确的顺序是:

use: ['style-loader' ,'css-loader']
###

image.png

###
{
    test: /\.vue$/,
    loader: 'vue-loader',
    options: {
      loaders: {
        'css': ['vue-style-loader', 'style-loader', 'css-loader'],
      }
    }
}

或者直接将 vue-loader 升到15的版本

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • webpack 打包vue文件的时候 vue文件中

    webpack 打包vue文件的时候 vue文件中

  • clickhouse的nested嵌套结构如何映射Ja

    clickhouse的nested嵌套结构如何映射Ja

  • Vue新手,请教一些基础的问题

    Vue新手,请教一些基础的问题

  • 请问用swift编译出的framework如何实现

    请问用swift编译出的framework如何实现

腾讯云代理商
海外云服务器