package.json文件说明;
**{
"name": "webpack",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"devDependencies": {
"@babel/core": "^7.8.7", //适配高版本js的loader
"@babel/preset-env": "^7.8.7", //适配高版本js的loader
"babel-loader": "^8.0.6", //适配高版本js的loader
"clean-webpack-plugin": "^3.0.0", //清除dist目录的插件
"css-loader": "^3.4.2", //让webpack能够识别解析 css 文件
"file-loader": "^5.1.0", //图片解析需用
"html-webpack-plugin": "^3.2.0", //自动生成html的插件;
"mini-css-extract-plugin": "^0.9.0", //分离css的插件,
"node-sass": "^4.13.1",
"sass": "^1.26.3",
"sass-loader": "^8.0.2", //让webpack能够识别解析sass文件
"style-loader": "^1.1.3", //style-loader 通过(js)动态的创建style标签的方式,让解析后的css内容,能够作用到页面中;
"url-loader": "^3.0.0", //配置图片文件的解析
"webpack": "^4.42.0",
"webpack-cli": "^3.3.11",
"webpack-dev-server": "^3.10.3", //开发服务器
"webpack-merge": "^4.2.2" //分离开发环境与发布环境
},
"scripts": {
//分离前的命令
//"dev": "webpack-dev-server --config webpack.config.js",
//"build": "webpack --config webpack.config.js"
//分离后的命令
"dev": "webpack-dev-server --config config/webpack.dev.js",
"build": "webpack --config config/webpack.pro.js"
},
"dependencies": {
"jquery": "^3.4.1"
}
}
**
未分离的webpack.config.js文件
const path = require('path');
//引入自动生成 html 的插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
//引入分离css 文件的 模块
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
//导入清除插件,可以在每次打包之前,清除dist目录的内容;
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
//配置webpack 的配置文件,需要将配置的对象导出,给webpack使用;
module.exports = {
//1. 入口 entry,从那个文件打包
entry: './src/main.js',
//2. 出口 output,打包到那里去
output: {
path: path.join(__dirname, 'dist'), //打包输出的目录 ( 输出目录必须是个绝对路径 )
filename: "bundle.js" //打包生成的文件名;
},
//3. 模式mode, development未压缩的, production 压缩的;
mode: 'development',
//4. 配置module模块加载规则
//默认webpack只认识json,javascript, 不认识其他文件,如果希望打包处理其他文件,需要配置对应的loader
module: {
rules: [
//(1) 配置css文件的解析
{
//正则:匹配所有以css结尾的文件;
test: /\.css$/,
//实际处理顺序:从右往左 <=
// css-loader 让webpack能够识别解析 css 文件;
//style-loader 通过(js)动态的创建style标签的方式,让解析后的css内容,能够作用到页面中;
use: [{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '../', //公共资源加载的路径
},
},
'css-loader']
},
//(2)配置sass文件的解析
{
test: /\.s[ac]ss$/,
use: [{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '../', //公共资源加载的路径
},
},
'css-loader', {
loader: 'sass-loader',
options: {
// Prefer `dart-sass`
implementation: require('sass'),
},
}]
},
//(3)配置图片文件的解析
{
test: /\.(png|jpg|git)$/i,
use: [
//url-loader 如果不配置,默认都会将文件转成base64字符串格式;
{
loader: 'url-loader',
//8kb以内,转成base64,节约请求次数;
options:{
limit: 8 * 1024,
//配置文件输出的文件名
name: '[name].[ext]',
//配置静态资源的引用路径
publicPath: '../images/',
//配置输出的文件目录,
outputPath: "images/"
},
}
]
},
//(4)配置 适配高版本js;
{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
},
//5. 配置插件;
plugins: [
//自动生成html的插件;
new HtmlWebpackPlugin({ template: './public/index.html' }),
//分离css的插件,定义打包好的文件存放的路径和文件名;
new MiniCssExtractPlugin({filename: 'css/index.css'}),
//清除dist目录的插件;
new CleanWebpackPlugin()
],
//6.配置开发服务器;
devServer:{
open:true, //自动打开游览器
port:3000,
},
//7.公共模块提取配置,公共模块大小必须大于30kb才回被独立打包;
optimization:{
splitChunks:{
chunks:"all", //提取所有文件的共同模块;是webpack内置的一个插件;
}
}
}
分离后的配置文件;
webpack.base.js
//公共配置;
const path = require('path');
//引入自动生成 html 的插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
//引入分离css 文件的 模块
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
//导入清除插件,可以在每次打包之前,清除dist目录的内容;
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
//配置webpack 的配置文件,需要将配置的对象导出,给webpack使用;
module.exports = {
//1. 入口 entry,从那个文件打包
entry: './src/main.js',
//2. 出口 output,打包到那里去
output: {
path: path.join(__dirname, '../dist'), //打包输出的目录 ( 输出目录必须是个绝对路径 )
filename: "bundle.js" //打包生成的文件名;
},
//4. 配置module模块加载规则
//默认webpack只认识json,javascript, 不认识其他文件,如果希望打包处理其他文件,需要配置对应的loader
module: {
rules: [
//(1) 配置css文件的解析
{
//正则:匹配所有以css结尾的文件;
test: /\.css$/,
//实际处理顺序:从右往左 <=
// css-loader 让webpack能够识别解析 css 文件;
//style-loader 通过(js)动态的创建style标签的方式,让解析后的css内容,能够作用到页面中;
use: [{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '../', //公共资源加载的路径
},
},
'css-loader']
},
//(2)配置sass文件的解析
{
test: /\.s[ac]ss$/,
use: [{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '../', //公共资源加载的路径
},
},
'css-loader', {
loader: 'sass-loader',
options: {
// Prefer `dart-sass`
implementation: require('sass'),
},
}]
},
//(3)配置图片文件的解析
{
test: /\.(png|jpg|git)$/i,
use: [
//url-loader 如果不配置,默认都会将文件转成base64字符串格式;
{
loader: 'url-loader',
//8kb以内,转成base64,节约请求次数;
options: {
limit: 8 * 1024,
//配置文件输出的文件名
name: '[name].[ext]',
//配置静态资源的引用路径
publicPath: '../images/',
//配置输出的文件目录,
outputPath: "images/"
},
}
]
},
//(4)配置 适配高版本js;
{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
},
//5. 配置插件;
plugins: [
//自动生成html的插件;
new HtmlWebpackPlugin({ template: './public/index.html' }),
//分离css的插件,定义打包好的文件存放的路径和文件名;
new MiniCssExtractPlugin({ filename: 'css/index.css' }),
//清除dist目录的插件;
new CleanWebpackPlugin()
],
//公共模块提取配置,公共模块大小必须大于30kb才回被独立打包;
optimization:{
splitChunks:{
chunks:"all", //提取所有文件的共同模块;是webpack内置的一个插件;
}
}
}
webpack.dev.js
//开发配置;
//导入公共配置;
const base = require('./webpack.base');
//导入一个用于合并的包
const merge = require('webpack-merge');
//导出开发环境配置
//merge 可以传入多个属性,后面的对象属性回覆盖前面的;
module.exports = merge(base,{
//3. 模式mode, development未压缩的, production 压缩的;
mode: 'development',
//6.配置开发服务器;
devServer: {
open: true, //自动打开游览器
port: 3000,
}
})
webpack.pro.js
//生产配置;
//导入公共配置;
const base = require('./webpack.base');
//导入一个用于合并的包
const merge = require('webpack-merge');
//导出生产环境配置
//merge 可以传入多个属性,后面的对象属性回覆盖前面的;
module.exports = merge(base, {
//3. 模式mode, development未压缩的, production 压缩的;
mode: 'production',
})
多入口,多出口配置
入口改成对象形式,出口filname改成filname:"js/[name].bundle.js"
entry: {
index:'./src/index.js',
about:'./src/about.js'
},
//2. 出口 output,打包到那里去
output: {
path: path.join(__dirname, '../dist'), //打包输出的目录 ( 输出目录必须是个绝对路径 )
filename: "js/[name].bundle.js" //打包生成的文件名;[name]指代 entry 对象的键名;
}
配置vue的loader
//安装依赖包
cnpm install vue-loader vue-template-compiler -D
webpack.base.js中引入vue-loader/lib/plugin
//引入 vue 的loader
const VueLoaderPlugin = require('vue-loader/lib/plugin');
module:{
rules:{
//解析vue文件 vue-loader
{
test:/\.vue$/,
loader:'vue-loader'
}
}
}
plugins: [
//vue 的插件;vue-loader的使用都是需要伴生 VueLoaderPlugin的
new VueLoaderPlugin()
],