# webpack重点内容
# 1.入口entry
由这个模块来构建项目的内部依赖图,默认值是./src/index.js
可以直接在配置中进行配置
entry: './src/index.js',
# 2.出口output
输出webpack创建的bundle的目标位置,默认值是./dist/main.js
配置文件中需要配置的属性有
output: {
filename: 'build.js',
path: resolve(__dirname, 'build')
}
# 3.loader
对webpack无法直接处理的文件类型进行预处理,将其转换成commonJS模块,处理后添加至依赖图中
配置文件中主要需要配置识别属性test、加载器属性use
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
"css-loader"
]
},
{
test: /\.scss$/,
use: [
'style-loader', // 在head中创建style部分,并添加入口函数中的样式
"css-loader", // 将.css文件转换成commonJS模块
"sass-loader" // 将.scss进行预处理,编译成.css文件
]
},
]
}
// 注意:use中加载器的执行顺序为从下至上,从右至左
// 而且都需要先利用npm安装后,再进行使用,少数加载器有相互封装的情况则根据具体情况来使用,比如file-loader就封装在url-loader中,所以一般安装是需要都安装完毕,使用时则只需要使用url-loader即可
# 4.插件plugin
一般来处理loader进行不了的任务,比如打包优化,资源管理,注入环境变量等等。更加具体的例子:比如使用HtmlWebpackPlugin插件,在每次生成bundle文件后会自动创建对应的html文件
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装
// webpack是以nodejs为基础开发的,所以webpack使用最多的就是commonJS模块,比如上面的require
plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })]
// 这个插件开发时一般要配合devServer来使用
# 5.mode[模式]
webpack中一共有三种模式:开发模式development,生产模式production,none,生产模式会将代码进行压缩,所以开发或者学习时一般用开发模式development
// webpack.config.js
module.exports = {
mode: 'production',
};
// 利用脚本改变
// package.json
"scripts": {
"build": "webpack --mode production" // 发布时使用
}
以上核心内容本质上都是module.exports的属性,也叫做节点
# 6.其他比较重要的属性
# devServer
//webpack.config.js
devServer: {
static: resolve(__dirname, 'build'),
open: true, //打包完成后自动打开浏览器
host: "localhost",//主机地址
port: 80 //端口号,若设置端口号为80,则默认隐藏
}
// 以上内容不是必须的,但是devServer可以更灵活的配置serve
// package.json
"scripts": {
"dev": "webpack serve" // 运行webpack时同时开启devServer的web-server
}
这个组件的作用是编译后使用内存搭建一个web server
,实现通过访问localhost就能实时监控项目的改动,必须搭配html-webpack-plugin
插件一起使用,且该插件初始化时必须指定template参数,但是webpack-dev-server
会阻止打包文件在本地磁盘中的创建,而是在内存中创建对应的虚拟文件
因为它的serve是在内存中操作虚拟文件,并且若html-webpack-plugin
以默认方式创建html文件的话会直接失败
# devtool
devtool:"eval-source-map", // 建议在开发中使用这个sourcemap,可以精确定位bug
// sourceMap是一个信息文件,里边存储着位置信息,若将devtool设置为source-map,
// 则会打包一个.map文件,里边有精确的源代码信息,所以在任何情况下都不建议将devtool设置为source-map
//devtool:"nosources-source-map", // 建议在生产中关闭sourcemap或者使用这个sourcemap,为了安全性,防止被追踪
devtool
,开发工具,主要作用是利用不同的sourceMap
进行代码追踪,便于快速进行bug定位,但是也存在一定的安全性问题,所以要根据具体的情况选择不同的sourceMap
# resolve
resolve: {//配置模块解析
// 创建important或者require的别名,可以将特定的文件或者目录解析成自定义名称,导入时只需导入对应的key即可
alias: {
// 告诉webpack,程序员写的代码中,@表示src这一层目录
"@":resolve(__dirname, './src/')
}
}
resolve
可以进行模块解析的配置,而alias
属性的主要作用是简化important
或者require
的路径,上面的代码利用@
替换./src
开发目录,可以使所有的导入都以./src
作为路径起始点
# 注意:
webpack无需loader也能够解析json文件和js文件,也就是说,在入口函数中,可以直接import对应的文件来使用,而不需要调整配置文件wepack.config.js