webpack.config.js 用处
在根目录创建 webpack.config.js 进行 webpack 的配置
作用:指示 webpack 干哪些活(当你运行 webpack 指令时,会加载里面的配置)
所有构件工具都是基于 node.js 平台运行的,模块化默认采用 common.js
打包样式资源
下载完 loader 之后,在 webpack.config.js 中的 module-rules 下进行配置即可
解析 css 资源
npm i style-loader css-loader -D
解析 less 资源
npm i less less-loader -D
解析 scss 资源
npm i node-sass sass-loader -D
const { resolve } = require('path')
module.exports = { entry: './src/index.js', output: { filename: 'main.js', path: resolve(__dirname, 'build'), }, module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader', ], }, { test: /\.less$/, use: [ 'style-loader', 'css-loader', 'less-loader', ], }, { test: /\.scss$/, use: [ 'style-loader', 'css-loader', 'sass-loader', ], }, ], }, plugins: [], mode: 'development', }
|
打包 html 资源
- 首先需要下载插件
npm i html-webpack-plugin -D
- 之后要在
webpack.config.js
中,头部进行引用
- 最后在
plugins
中进行配置
const { resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = { entry: './src/index.js', output: { filename: 'main.js', path: resolve(__dirname, 'build'), }, module: {}, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html', }), ], mode: 'development', }
|
打包图片资源
如果图片资源在 css 内,如background-image
:
- 使用命令行下载 loader:
npm i url-loader file-loader -D
- 在
webpack.config.js
中配置即可
如果图片资源在 html 内,如img
,在还要额外下载 loader: npm i html-loader -D
- 注意:因为在 src 下的 html 中的 img 使用的是相对路径,所以打包后的 html 并找不到此路径下的文件资源,所以需要在
outout下为publicPath指定路径
const { resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = { entry: './src/index.js', output: { filename: 'main.js', path: resolve(__dirname, 'build'), publicPath: './', }, module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader', ], }, { test: /\.(jpg|png|gif)$/, loader: 'url-loader', options: {
limit: 8 * 1024,
name: '[hash:10].[ext]', }, }, { test: /\.html$/, loader: 'html-loader', }, ], }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html', }), ], mode: 'development',
|
打包其他资源
其他资源(除了 html/js/css 资源以外的资源)-不需要做任何处理,直接原封不动的输出出去就可以了的
- 首先使用
npm i file-loader -D
下载
- 然后在
webpack.config.js
中配置即可
const { resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = { entry: './src/index.js', output: { filename: 'main.js', path: resolve(__dirname, 'build'), }, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'], }, {
test: /\.(eot|svg|ttf|woff|woff2)/, loader: 'file-loader', options: { name: '[hash:10].[ext]', }, }, ], }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html', }), ], mode: 'development', }
|
本地服务器 devServer
使用npm i webpack-dev-server -D
下载,之后在进行配置
开发服务器 devServe-用来自动化(自动编译,自动打开浏览器,自动刷新浏览器….)
特点:只会在内存中编译打包,不会有任何输出,防止了每次修改后都要重新打包编译才能看到效果
启动 devServe 指令为: npx webpack-dev-server
/webpack5 以上为npx webpack serve
const { resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = { entry: './src/index.js', output: { filename: 'main.js', path: resolve(__dirname, 'build'), }, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'], }, ], }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html', }), ], mode: 'development', devServer: { contentBase: resolve(__dirname, 'build'), compress: true, port: 3000, open: true, }, }
|
分类打包输出
每次打包输出都会在 build 文件夹下生成许多文件,为了打包后的文件清晰,我们可以在配置中的module-rules-options-outputPath
来指定打包后的文件夹
const { resolve } = require('path') const HtmlWebpackPlugins = require('html-webpack-plugin')
module.exports = { entry: './src/js/index.js', output: { filename: 'js/main.js', path: resolve(__dirname, 'build'), publicPath: './', }, module: { rules: [ { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'], }, { test: /\.css$/, use: ['style-loader', 'css-loader'], }, { test: /\.(png|jpg|gif)$/, loader: 'url-loader', options: { limit: 8 * 1024, name: '[hash:10].[ext]', outputPath: 'imgs', }, }, { test: /\.html$/, loader: 'html-loader', }, { test: /\.(eot|woff|woff2|ttf|svg)$/, loader: 'file-loader', options: { name: '[hash:10].[ext]', outputPath: 'fonts', }, }, ], }, plugins: [ new HtmlWebpackPlugins({ template: './src/index.html', }), ], mode: 'development', devServer: { contentBase: resolve(__dirname, 'build'), compress: true, open: true, port: 3000, }, }
|