世界上最伟大的投资就是投资自己的教育
https://github.com/survivejs/webpack-merge
webpack.config.js
const dev = require('./webpack/webpack.dev.js');
const prod = require('./webpack/webpack.prod.js');
const TARGET = process.env.npm_lifecycle_event;
if(TARGET === 'dev') {
module.exports = dev
}
if(TARGET === 'prod') {
module.exports = prod
}
webpack/webpack.common.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CleanWebpackPlugin = require('clean-webpack-plugin');
let pathsToClean = [
'dist'
]
module.exports = {
// entry: "./src/index.js",
entry: {
// app: ["@babel/polyfill", './src/index.js'],
app: './src/index.js',
hello: './src/hello.js'
},
output: {
path: path.resolve(__dirname, '..', 'dist'),
filename: "js/[name]-[hash].bundle.js"
},
module: {
rules: [
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
// options: {
// presets: [['@babel/preset-env', { "debug": true }]],
// plugins: [["@babel/plugin-proposal-decorators", { "decoratorsBeforeExport": true }]]
// }
// options: {
// plugins: [require('@babel/plugin-transform-arrow-functions')]
// }
}
},
{
test: /\.(png|jpe?g|gif|svg)$/,
use: [
{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: 'images/'
}
},
{
loader: 'image-webpack-loader'
}
]
}
]
},
plugins: [
new HtmlWebpackPlugin({
title: 'Admin',
filename: 'admin.html',
template: 'public/index.html',
chunks: ["hello"]
}),
new HtmlWebpackPlugin({
title: 'Index',
filename: 'index.html',
template: 'public/index.html',
chunks: ["app"]
})
]
}
webpack/webpack.dev.js
const path = require('path');
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CleanWebpackPlugin = require('clean-webpack-plugin');
let pathsToClean = [
'dist'
]
module.exports = merge(common, {
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /\.(scss|sass)$/,
use: [
'style-loader', // creates style nodes from JS strings
"css-loader", // translates CSS into CommonJS
"sass-loader" // compiles Sass to CSS, using Node Sass by default
]
},
{
test: /\.less$/,
use: [
'style-loader', // creates style nodes from JS strings
'css-loader', // translates CSS into CommonJS
'less-loader' // compiles Less to CSS
]
}
]
},
plugins: [
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: 'css/[name].css',
chunkFilename: 'css/[id].css',
}),
new CleanWebpackPlugin(pathsToClean)
],
devtool: false,
devServer: {
contentBase: path.join(__dirname, 'dist'),
compress: true,
port: 9000
},
mode: 'development'
});
webpack/webpack.prod.js
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CleanWebpackPlugin = require('clean-webpack-plugin');
let pathsToClean = [
'dist'
]
module.exports = merge(common, {
module: {
rules: [
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader'
]
},
{
test: /\.(scss|sass)$/,
use: [
MiniCssExtractPlugin.loader, // creates style nodes from JS strings
"css-loader", // translates CSS into CommonJS
"sass-loader" // compiles Sass to CSS, using Node Sass by default
]
},
{
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader, // creates style nodes from JS strings
'css-loader', // translates CSS into CommonJS
'less-loader' // compiles Less to CSS
]
}
]
},
plugins: [
new MiniCssExtractPlugin({
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: 'css/[name].[hash].css',
chunkFilename: 'css/[id].[hash].css',
}),
new CleanWebpackPlugin(pathsToClean)
],
mode: 'production'
});
03:201Free轻松学 Webpack 4 免费视频教程 #1 课程介绍
05:042Free轻松学 Webpack 4 免费视频教程 #2 安装
05:483Free轻松学 Webpack 4 免费视频教程 #3 zero config
06:464Free轻松学 Webpack 4 免费视频教程 #4 Mode
05:125Free轻松学 Webpack 4 免费视频教程 #5 搭建项目
05:046Free轻松学 Webpack 4 免费视频教程 #6 用 npx 来解决全局安装的问题
04:387Free轻松学 Webpack 4 免费视频教程 #7 配置文件 Webpack.config.js
04:418Free轻松学 Webpack 4 免费视频教程 #8 配置多入口文件 Entry Points
04:329Free轻松学 Webpack 4 免费视频教程 #9 什么是 Babel
05:0910Free轻松学 Webpack 4 免费视频教程 #10 babel-loader 的介绍与安装
05:2911Free轻松学 Webpack 4 免费视频教程 #11 Babel Plugins - plugin-transform-arrow-functions
07:1912Free轻松学 Webpack 4 免费视频教程 #12 Babel Plugins - 更多的插件
05:2613Free轻松学 Webpack 4 免费视频教程 #13 Babel Presets - @babel/preset-env
02:3814Free轻松学 Webpack 4 免费视频教程 #14 devtool false 让编译后的代码可读性强一些
04:4315Free轻松学 Webpack 4 免费视频教程 #15 @babel/polyfill 的那些事儿 part 1
06:5816Free轻松学 Webpack 4 免费视频教程 #16 @babel/polyfill 的那些事儿 part 2 - 原理及如何解决
05:1117Free轻松学 Webpack 4 免费视频教程 #17 @babel/polyfill 的那些事儿 part 3 - preset-env 的选项和按须编译
06:0218Free轻松学 Webpack 4 免费视频教程 #18 @babel/runtime
05:1219Free轻松学 Webpack 4 免费视频教程 #19 @babel/plugin-transform-runtime 是如何工作的
05:4420Free轻松学 Webpack 4 免费视频教程 #20 打造 React 开发环境
08:1921Free轻松学 Webpack 4 免费视频教程 #21 使用第一个 Webpack 插件 html-Webpack-plugin
08:0522Free轻松学 Webpack 4 免费视频教程 #22 配置多个单页面应用
04:4523Free轻松学 Webpack 4 免费视频教程 #23 使用 loader 来处理 CSS
06:3424Free轻松学 Webpack 4 免费视频教程 #24 使用 loader 来处理 Sass 和 Less 文件
08:0725Free轻松学 Webpack 4 免费视频教程 #25 用 mini-css-extract-plugin 把 CSS 分离成文件
04:5426Free轻松学 Webpack 4 免费视频教程 #26 启动服务器并实时刷新 Webpack-dev-server
04:5527Free轻松学 Webpack 4 免费视频教程 #27 用 clean-Webpack-plugin 来清除文件
07:5928Free轻松学 Webpack 4 免费视频教程 #28 如何打包图片(包含规划编译出的文件的目录结构)
03:3929Free轻松学 Webpack 4 免费视频教程 #29 如何压缩图片
17:08Free轻松学 Webpack 4 免费视频教程 #30 构建开发和生产环境 - 分离配置文件
02:3831Free轻松学 Webpack 4 免费视频教程 #31 显示打包进度条
03:5032Free轻松学 Webpack 4 免费视频教程 #32 调整配置 - 在浏览器显示 DevServer 的 编译错误的信息
10:5233Free轻松学 Webpack 4 免费视频教程 #33 devtool 和 source map 深入解析
10:0734Free轻松学 Webpack 4 免费视频教程 #34 解决开发环境和生产环境打包不一致的情况
12:3435Free轻松学 Webpack 4 免费视频教程 #35 打包优化 - 深入探索 mode、Optimization、terser-Webpack-plugin、UglifyjsWebpackPlugin
▬▬▬▬▬▬ 联系我 👋 ▬▬▬▬▬▬
微信:qiuzhi99pro
b 站:https://space.bilibili.com/31152817
知乎:https://www.zhihu.com/people/rails365
Youtube:https://www.youtube.com/channel/UCA-Jkgr40A9kl5vsIqg-BIg
© 汕尾市求知科技有限公司 | 专业版网站 | 关于我们 | 在线学员:1143
粤公网安备 44152102000088号
| 粤ICP备19038915号