由于使用`--contentBase`指令的过程比较繁琐,需要指定启动的目录,同时还需要修改index.html中script标签的src属性,所以推荐使用`html-webpack-plugin`插件配置启动页面.
1.1 运行`cnpm i html-webpack-plugin --save-dev`安装到开发依赖 或者 `cnpm i html-webpack-plugin -D`
该插件的作用是在内存中生成index.html文件
1.2 修改`webpack.config.js`
1.2.1 导入html-webpack-plugin
1.2.2 在plugins中引入`cnpm i html-webpack-plugin --save-dev`
// 导入处理路径的模块
var path = require('path');
// 导入自动生成HTMl文件的插件
var htmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: path.resolve(__dirname, 'src/js/main.js'), // 项目入口文件
output: { // 配置输出选项
path: path.resolve(__dirname, 'dist'), // 配置输出的路径
filename: 'bundle.js' // 配置输出的文件名
},
plugins:[ // 添加plugins节点配置插件
new htmlWebpackPlugin({
template:path.resolve(__dirname, 'src/index.html'),//模板路径
filename:'index.html'//自动生成的HTML文件的名称
})
]
}
注意:
1. 只要是插件都需要放到plugins中
2. htmlWebpackPlugin插件的构造函数传递的参数是一个对象,有两个参数:
2.1 参数一:指定模板页面,插件会根据该文件生成内存中的页面
2.2 参数二:指定生成的页面的名称
1.3 修改`package.json`中`script`节点中的dev指令如下
"dev": "webpack-dev-server"
1.4 将index.html中script标签注释掉,因为`html-webpack-plugin`插件会自动把bundle.js注入到index.html页面中
2.1 自动在内存中根据指定页面生成一个内存的页面
2.2 自动把打包好的boundle.js追加到页面中
|-- dist
|-- node_modules
|-- src
|-- css
|-- images
|-- js
|-- index.html
|-- main.js
|-- package-lock.json
|-- package.json
|-- webpack.config.js
注意:css、images、js目录是空的。
Document
- 这个是第1个li标签
- 这个是第2个li标签
- 这个是第3个li标签
- 这个是第4个li标签
- 这个是第5个li标签
- 这个是第6个li标签
- 这个是第7个li标签
- 这个是第8个li标签
- 这个是第9个li标签
- 这个是第10个li标签
注意:这里不需要引入js文件,因为html-webpack-plugin会自动引入到内存页面中
// 这个是main.js 是我们项目的JS入口文件
// 1. 导入jQuery
// import *** from *** 是ES6中导入模块的方式
// 在node.js中导入模块用 const $ = require('jquery');
// 由于现在很多浏览器解析不了ES6 的语法,所以这一行执行的时候会报错
import $ from 'jquery' // 表示从node_modules中导入jQuery包,用$这个变量名来接收
$(function(){
$('li:odd').css('backgroundColor','yellow');
$('li:even').css('backgroundColor',function(){
return '#' + 'D97643';
});
});
{
"name": "webpackstudy",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"jquery": "^3.4.1"
},
"devDependencies": {
"html-webpack-plugin": "^3.2.0",
"webpack": "^3.6.0",
"webpack-dev-server": "^2.9.1"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev1": "webpack-dev-server --open --port 6666 --contentBase src --hot",
"dev": "webpack-dev-server"
},
"keywords": [],
"author": "",
"license": "ISC"
}
注意:在script标签中配置"dev":"webpack-dev-server",这样,就可以直接使用npm run dev来启动了
const path = require('path');
const webpack = require('webpack');
// 导入 在内存中生成的HTML页面的插件
// 注意:只要是插件都需要放到plugins中
const htmlwebpackPlugin = require('html-webpack-plugin');
// 这个配置文件,其实就是一个js文件,通过node中的模块操作,向外暴露一个配置对象
module.exports = {
entry:path.join(__dirname,'./src/main.js'), // 入口,表示要使用webpack打包的那个文件;__dirname 表示当前根目录
output:{ // 输出文件相关的属性
path:path.join(__dirname,'./dist'), // 指定 打包好的文件,输出到哪个目录中去
filename:'boundle.js' // 指定输出的文件的名称
},
devServer:{ // 这里是配置dev-server命令参数的
// --open --port 6666 --contentBase src --hot
open:true, // 自动打开浏览器
port:7777, // 指定端口号
contentBase:'src', // 指定托管的根目录
hot:true // 启用热更新
},
plugins:[ // 配置插件的节点
new webpack.HotModuleReplacementPlugin(), // new 一个热更新的模块对象,
new htmlwebpackPlugin({ // 创建一个在内存中生成HTML页面的插件
template:path.join(__dirname,'./src/index.html'), //指定模板页面,插件会根据该文件生成内存中的页面
filename:'index.html' // 指定生成的页面的名称
})
]
}
注意:html-webpack-plugin插件需要先引入,再在plugins中配置
我们现在在css目录中加入index.css文件
li {
list-style:none;
}
在main.js文件中引入css文件
import './css/index.css';
保存,发现报错
Module parse failed: Unexpected token (1:3)
You may need an appropriate loader to handle this file type.
为什么jQuery可以用import引入,而css文件不可以了,这是因为webpack默认情况下只能打包处理js类型的文件,无法处理其他非js类型的文件,当我们保存的时候,webpack自动打包,发现该文件不是js文件,所以报错了。
那么,我们要怎么处理这些非js文件了,这时候,我们就需要手动安装一些合适的第三方loader加载器
5.1 安装loader加载器
运行`cnpm i style-loader css-loader --save-dev` 或者 `cnpm i style-loader css-loader -D`
5.2 修改`webpack.config.js`配置文件,新增配置节点module,它是一个对象
module: { // 用来配置第三方loader模块的
rules: [ // 文件的匹配规则
{ test: /\.css$/, use: ['style-loader', 'css-loader'] }//处理css文件的规则
]
}
注意:
1. module:用来配置第三方loader模块的节点
2. rules:是个数组,数组中存放了所有第三方文件的匹配和处理规则,每一个规则用一个对象表示
3. test:匹配规则的正则表达式
4. use:表示使用哪些模块来处理`test`所匹配到的文件
注意:`use`中相关loader模块的调用顺序是从后向前调用的;
配置好之后,在main.js中就可以跟jQuery一样通过import引入css文件了。
1. 首先,webpack发现,我们并没有通过命令的形式,给它指定入口和出口
2. webpack就会去项目的根目录中,查找一个叫做webpack.config.js的配置文件
3. 当找到配置文件后,webpack会去解析执行这个配置文件,当解析执行完配置文件之后,就得到了配置文件中导出的配置对象
4. 当webpack拿到配置对象后,就拿到了配置对象中指定的入口和出口,然后进行打包构建。
less文件也是一种样式文件,和css文件打包方式差不多
7.1 新建index.less文件
u {
margin: 0px;
padding: 0px;
}
7.2 安装less-loader
运行`cnpm i less-loader less -D`
7.3 配置匹配规则
{test:/\.less/,use:['style-loader','css-loader','less-loader']}
7.4 main.js引入less文件
import './css/index.less';
1. 运行`cnpm i sass-loader node-sass --save-dev`
2. 在`webpack.config.js`中添加处理sass文件匹配规则:
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }
3. 在main.js文件引入scss文件