这是我参与「第五届青训营 」笔记创作活动的第6天
webpack
要求
运行 webpack 5 的 Node.js 最低版本是 10.13.0 (LTS)
webpack安装
npm install -D webpack webpack-cli
打包
添加src/index.js和index.html作为入口
在package.json中script添加"build":"webpack"
运行npm run build
打包代码将会输出在dist文件夹
使用配置文件
新建webpack.config.js文件
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
},
};
管理资源
加载CSS
为了在javascript中加载css,需要安装插件style-loader和css-loader
在webpack.config.js中添加
module:{
rules:[
{
test:/.css$/i,
use:['style-loader','css-loader']
}
]
}
接下来,在js文件中直接import css文件即可
加载image
添加规则
{
test: /.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource',
},
加载font
添加规则
{
test: /.(woff|woff2|eot|ttf|otf)$/i,
type: 'asset/resource',
},
管理输出
模板
安装插件htmlwebpackplugin
在webpack.config.js中引入,并添加插件
plugins: [
new HtmlWebpackPlugin(),
],
清理输出文件夹
在每次重新构建后清理输出文件夹,在output中添加clear:true
开发环境
使用开发工具
现将webpack.config.js 中mode:development
watch mode
package.json 中script添加
{
"watch":"webpack --watch"
}
在每次修改代码后,代码会被重新编译,无需手动运行构建
使用webpack-dev-server
npm install webpack-dev-server
修改webpack.config.js
添加
devserver:{
static:'./dist'
}
package.json 中script添加
{
"dev":"webpack serve --open"
}
常见loader
文件
val-loader将代码作为模块执行,并将其导出为 JS 代码ref-loader用于手动建立文件之间的依赖关系
JSON
cson-loader加载并转换 CSON 文件
语法转换
babel-loader使用 Babel 加载 ES2015+ 代码并将其转换为 ES5esbuild-loader加载 ES2015+ 代码并使用 esbuild 转译到 ES6+buble-loader使用 Bublé 加载 ES2015+ 代码并将其转换为 ES5traceur-loader使用 Traceur 加载 ES2015+ 代码并将其转换为 ES5ts-loader像加载 JavaScript 一样加载 TypeScript 2.0+coffee-loader像加载 JavaScript 一样加载 CoffeeScriptfengari-loader使用 fengari 加载 Lua 代码elm-webpack-loader像加载 JavaScript 一样加载 Elm
模板
html-loader将 HTML 导出为字符串,需要传入静态资源的引用路径pug-loader加载 Pug 和 Jade 模板并返回一个函数markdown-loader将 Markdown 编译为 HTMLreact-markdown-loader使用 markdown-parse 解析器将 Markdown 编译为 React 组件posthtml-loader使用 PostHTML 加载并转换 HTML 文件handlebars-loader将 Handlebars 文件编译为 HTMLmarkup-inline-loader将 SVG/MathML 文件内嵌到 HTML 中。在将图标字体或 CSS 动画应用于 SVG 时,此功能非常实用。twig-loader编译 Twig 模板并返回一个函数remark-loader通过remark加载 markdown,且支持解析内容中的图片
样式
style-loader将模块导出的内容作为样式并添加到 DOM 中css-loader加载 CSS 文件并解析 import 的 CSS 文件,最终返回 CSS 代码less-loader加载并编译 LESS 文件sass-loader加载并编译 SASS/SCSS 文件postcss-loader使用 PostCSS 加载并转换 CSS/SSS 文件stylus-loader加载并编译 Stylus 文件
框架
vue-loader加载并编译 Vue 组件angular2-template-loader加载并编译 Angular 组件