webpack打包后CSS样式没有引用进来
我的项目目录结构
.
├── dist
│ ├── index.html
│ └── main.bundle.js
├── node_modules
├── package-lock.json
├── package.json
├── src
│ ├── css
│ │ └── style.css
│ ├── index.html
│ └── js
│ └── main.js
└── webpack.config.js
src 目录下的 index.html 文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Webpack DEMO</title>
<link rel="stylesheet" href="./css/style.css">
</head>
<body>
<h1 class="title">Webpack DEMO</h1>
<script src="./js/main.js"></script>
</body>
</html>
src 目录下的 style.css 文件
*{margin:0;padding:0;}
html, body {
height:100%;
}
body {
background-color:#000;
}
.title {
display:inline-block;
margin:30px;
line-height:1.5;
font-size:36px;
color:#FFF;
}
webpack.config.js 文件内容如下
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
entry:'./src/js/main.js',
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test:/\.css$/,
use: [
{
loader: MiniCssExtractPlugin.loader
},
'style-loader',
'css-loader'
]
}
]
},
plugins: [
new CleanWebpackPlugin('dist'),
new webpack.HotModuleReplacementPlugin(),
new HtmlWebpackPlugin({
hash: true
}),
new MiniCssExtractPlugin({
filename: './dist/[name].[hash].css'
})
],
devServer: {
contentBase: path.resolve(__dirname, 'src'),
hot: true,
inline:true
},
};
打包后生成 dist 目录下的 index.html 文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Webpack App</title>
</head>
<body>
<script type="text/javascript" src="main.bundle.js?66b744cd3fcfe1839a99"></script></body>
</html>
打包后为什么原来的页面里引用的样式不见了呢?
我想要的效果是每次打包后像 JS 脚本一样,样式自动引入进来并且带上 hash ,该如何实现呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
loader
类似管道运算,每一个loader执行特定的任务并提供输入输出。按照你提共的代码,loder的执行顺序:
css-loader
-->style-loader
-->MiniCssExtractPlugin.loader
。css-loader:在js代码中使用
import
和require
来导入css文件,如果css文件中包含@import
和url()
这两个语句就需要css-loader
来处理,输出解析结果。style-loader:将输入结果创建
style
dom元素,创建dom的代码会打包在js bundle里。MiniCssExtractPlugin.loader:将输入结果分离为css文件,并压缩。
可以这样理解
style-loader
和MiniCssExtractPlugin.loader
只接收上一个loader提供的输入,但不为下一个loader提供输出。所以style-loader执行完后,MiniCssExtractPlugin.loader不会分离并压缩css文件。在开发模式时使用style-loader,生产环境时使用 MiniCssExtractPlugin.loader分离css文件。
下面是对webpack.conf.js进行的修改: