// 输出模块
// __dirname是nodejs的一个全局变量,它指向当前执行脚本所在的目录。
module.exports = {
entry: __dirname + "/src/index.js", // 唯一入口文件
output: {
path: __dirname + "/dist", // 打包后的文件存放的路径
filename: "bundle.js" // 打包后输出文件的文件名
}
};
module.exports:输出模块的意思webpack -p //打包时,对文件进行压缩混淆。
webpack -d //生成sourcemap。
filename:输出文件名;
template:模板文件,不局限于html后缀哦;
removeComments:移除HTML中的注释;
collapseWhitespace:删除空白符与换行符,整个文件会压成一行;
inlineSource:插入到html的css、js文件都要内联,即不是以link、script的形式引入;
inject:是否能注入内容到 输出 的页面去;
chunks:指定插入某些模块;
hash:每次会在插入的文件后面加上hash ,用于处理缓存,如:;
其他:favicon、meta、title ……;
// 输出模块
// __dirname是nodejs的一个全局变量,它指向当前执行脚本所在的目录。
module.exports = {
mode: 'development',
entry: __dirname + "/src/index.js", // 唯一入口文件
output: {
path: __dirname + "/dist", // 打包后的文件存放的路径
filename: "bundle.js" // 打包后输出文件的文件名
},
module: {
rules: [
{
test: /\.(png|jpg|gif|jpeg)$/, //匹配规则,这里是匹配图片
use: [
{
loader: 'url-loader', // 对应的loader
options: {
limit: 8192 // 图片小于8192则会进行base64编码
}
}
]
}
]
}
};
npm i loader的名字 -D
如有报错,则说明需要安装其他的所需模块,依次安装即可,如:url-loader依赖file-loader,故需要安装两个loader才能正确打包,否则会报错。但是在配置文件中则不需要写上file-loader。
// 安装webpack和webpack-cli,因为下面的loader和plugin需要这两个
npm i webpack webpack-cli -D
// 打包图片的url-loader
npm i url-loader file-loader -D
// 处理css、sass、less样式文件的loader
npm i css-loader style-loader -D
npm i sass fibers node-sass sass-loader -D
npm i less less-loader -D
// 将ES6等高级语法的js文件转化为ES5语法的js文件的loader
npm i babel-loader @babel/core @babel/preset-env -D
// 该插件将CSS提取到单独的文件中。它为每个包含CSS的JS文件创建一个CSS文件。它支持CSS和SourceMap的按需加载。
npm install --save-dev mini-css-extract-plugin
// 到目前为止,我们已经将所有资产手动包含在index.html文件中,但是随着应用程序的增长,一旦您开始在文件名中使用散列并输出多个包,将很难继续index.html手动管理文件。但是,有一些插件可以简化此过程。
npm install --save-dev html-webpack-plugin
// 启动服务并支持热替换
npm i webpack-dev-server -D
对应的 webpack.config.js 配置文件:
// 输出模块
// __dirname是nodejs的一个全局变量,它指向当前执行脚本所在的目录。
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const path = require('path')
const NODE_ENV = 'development'
const devMode = NODE_ENV !== 'production';
module.exports = {
mode: NODE_ENV,
entry: path.join(__dirname, "/src/index.js"), // 唯一入口文件
output: {
path: path.join(__dirname, 'dist'), // 打包后的文件存放的路径
filename: "bundle.js" // 打包后输出文件的文件名
},
devServer: {
contentBase: path.join(__dirname, 'dist'),
compress: true,
port: 9000
},
plugins: [
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: devMode ? '[name].css' : '[name].[hash].css',
chunkFilename: devMode ? '[id].css' : '[id].[hash].css',
}),
new webpack.DefinePlugin({
'SERVICE_URL': JSON.stringify('https://127.0.0.1:8000')
}),
new HtmlWebpackPlugin({
title: 'hello world',
filename: "index.html",
template: "./index.html"
}),
],
module: {
rules: [
{
test: /\.(png|jpg|gif|jpeg)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 8192
}
}
]
},
{
test: /\.css$/,
use: [devMode ? 'style-loader' : MiniCssExtractPlugin.loader, 'css-loader' ]
},
{
test: /\.less$/,
use: [devMode ? 'style-loader' : MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
},
{
test: /\.s[ac]ss$/i,
use: [
// Creates `style` nodes from JS strings
devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
// Translates CSS into CommonJS
'css-loader',
// Compiles Sass to CSS
'sass-loader',
],
},
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
},
],
},
};
packge.json文件添加如下代码:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack-dev-server"
},