1 安装css-loader, style-loader :
在cmd命令行中 yarn add css-loader style-loader -D 回车
2 编辑webpack.config.js ,
module:{
rules:[// css-loader处理@import,style-loader是将css插入head 标签中,loader是希望单一,
//loader 顺序是从右向左执行,loader还可以写成对象的方式,就是{}
{
test:/\.css$/,
use:['style-loader','css-loader']
}
]
}
index.css 中引入a.css:
body{
background: red
}
@import './a.css';
index.js 中引入index.css, require 或者import 都可以:
let str2 = require('./index.css');
//import './index.css';
let str = require('./a.js'); // 不可能在broswer中跑,因为这里仅仅是node的规范
console.log(str);
console.log(str2);
出现以下错误:
Error: EBUSY: resource busy or locked, open ‘D:\code\nodejscode\webpack_demo\dis
t\index.html’ 有可能是chrome 没关闭的原因。
再次发布,成功,查看源码,html 中依旧只引入bundle.js,
<html>
<head></head>
<body>
<script type="text/javascript" src="bundle.js"></script></body>
</html>
但在chrome 中,bundle.js 已经解析出来 bundle.js 在head 中。
tip: style解析顺序,都是body,都是style那就最下边的覆盖上边的,因为style 标签从上往下顺序加载。
如果想自定义的(pink)奏效,则让 js 中打包的样式置顶: insertAt: ‘top’ :
module:{
rules:[// css-loader处理@import,style-loader是将css插入head 标签中,loader是希望单一,
//loader 顺序是从右向左执行,loader还可以写成对象的方式,就是{}
{
test:/\.css$/,
use: [
{
loader: 'style-loader',
options: {
insertAt: 'top', //Insert style tag at top of <head>
singleton: true, //this is for wrap all your style in just one style tag
}
},
"css-loader"
]
}
]
}
思考的问题:
为什么要在js 中引入css, 而不是如下,直接在html 中引入?
<html>
<head></head>
<body>
<link rel="stylesheet" href="index.css">
</body>
</html>
因为webpack 本身就是模块化打包,用webpack 就是要发挥该作用。