【webpack】1.快速入门
【webpack】2.webpack核心–loader
【webpack】3. 将入口html也打包
【webpack】4. webpack-dev-server思考
【webpack】5.开发和生产模式的配置加载
webpack本身就能理解js,所以可以随意import不需要loader,但是如果import的是其他文件比如css,则不能理解,需要告诉它css怎么加载,这就是loader的职责。css用css-loader和style-loader。loader是webpack的核心
为了方便也为了重新复习下webpack配置,重新新建个文件夹, 在mac terminal中输入
mkdir loader . //新建
cd loader
npm init -y
npm install webpack webpack-cli --save
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"pack": "node_modules/.bin/webpack --watch"
},
module.exports={
entry:'./js/index.js',//入口文件
output:{//出口
filename:'pack.js',//文件名
path:__dirname + '/dist'
}
}
现在目录如下
之前每次修改js里的文件都要重新打包,这里可以对package.json进行修改,实现监听变动并自动打包,package.json修改如下,后面加个–watch即可,只要项目里的文件发生变化就重新打包
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"pack": "node_modules/.bin/webpack --watch"
},
npm run pack打包
打包完成后的pack.js在./dist目录下,记得要在index.html中引入打包后的pack.js文件, 在浏览器中打开index.html即可
<body>
<script src="./dist/pack.js">script>
body>
在js文件夹下创建base.js,新建一个css文件夹放base.css,index.js里想要import base.js和base.css.base.js没问题,base.css就不行,因为webpack本身就能理解js,所以可以随意import不需要loader,但是如果import的是其他文件比如css,则不能理解,需要告诉它css怎么加载,这就是loader的职责。css用css-loader和style-loader
先npm引入这两个loader包
npm install css-loader style-loader --save
再修改配置文件webpack.config.js,备注中有解释
module.exports={
mode: 'development',//开发模式
entry:'./js/index.js',//入口文件
output:{//出口
filename:'pack.js',//文件名
path:__dirname + '/dist'//当前目录下
},
module: {
rules: [
{
test: /\.css$/i,//正则 意思是只要以css结尾的文件就遵循这个规则,i表示不区分大小写
use:['style-loader', 'css-loader']//css-loader是用来专门解析css语法,最主要作用就是把文件内容变成字符串传递下去,style-loader把css-loader解析好的字符串插入到html的style标签里。顺序很重要从右往左
}
]
}
}
这时候index.js里就可以引入css文件了
import '../css/base.css'
console.log('8')
css-loader是用来专门解析css语法,最主要作用就是把文件内容变成字符串传递下去
style-loader把css-loader解析好的字符串插入到html的style标签里
但这样也会出现问题,比如在base.js里设置body的背景色,在more.css里设置border样式,在index.js里引入这两个样式,打包运行打开index.html会发现,右下角仅仅能看到style, 看不出是哪个文件设置里背景色,哪个设置了border
解决办法就是修改配置文件webpack.config.js里的module的rules,[]里写成对象形式
rules: [
{
test: /\.css$/,//正则表达式,只要以css结尾的文件遵循这个规则
use:[
{
loader:'style-loader'
},
{
loader: 'css-loader',
options: {
sourceMap: true,
}
}
]//style-loader就是把这个文件放到html的