webpack--区分开发环境和生产环境

news/2024/10/22 16:39:02/

区分开发和生产环境

初步使用

可以直接配置两个文件:
在这里插入图片描述

dev

const path = require("path");
const { VueLoaderPlugin } = require("vue-loader");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { DefinePlugin } = require("webpack");
module.exports = {mode: "development",entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "../build"),//目录改变,要修改路径},resolve: {extensions: [".js", ".ts", ".tsx", ".jsx", ".cjs", ".vue"],alias: {"@": path.resolve(__dirname, "../src/vue"), //目录改变,要修改路径},},module: {rules: [{test: /\.css$/,use: ["style-loader", "css-loader", "postcss-loader"],},{test: /\.scss$/,use: ["style-loader", "css-loader", "sass-loader"],},{test: /\.(png|jpe?g|gif|svg)$/,type: "asset",parser: {dataUrlCondition: {maxSize: 4 * 1024,},},generator: {filename: "img/[hash][ext]",},},{test: /\.js$/,use: {loader: "babel-loader",},},{test: /\.vue/,use: "vue-loader",},],},plugins: [new VueLoaderPlugin(),new DefinePlugin({BASE_URL: "'./'",}),new HtmlWebpackPlugin({title: "test项目",template: "./src/index.html",}),],devServer: {hot: true,},
};

production:

const path = require("path");
const { VueLoaderPlugin } = require("vue-loader");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { DefinePlugin } = require("webpack");
module.exports = {mode: "production",entry: "./src/main.js", // 相对于context的output: {filename: "bundle.js",path: path.resolve(__dirname, "../build"), //目录改变,要修改路径clean: true, //  替代 new CleanWebpackPlugin(),},resolve: {extensions: [".js", ".ts", ".tsx", ".jsx", ".cjs", ".vue"],alias: {"@": path.resolve(__dirname, "../src/vue"), //目录改变,要修改路径},},module: {rules: [{test: /\.css$/,use: ["style-loader", "css-loader", "postcss-loader"],},{test: /\.scss$/,use: ["style-loader", "css-loader", "sass-loader"],},{test: /\.(png|jpe?g|gif|svg)$/,type: "asset",parser: {dataUrlCondition: {maxSize: 4 * 1024,},},generator: {filename: "img/[hash][ext]",},},{test: /\.js$/,use: {loader: "babel-loader",},},{test: /\.vue/,use: "vue-loader",},],},plugins: [new VueLoaderPlugin(),new DefinePlugin({BASE_URL: "'./'",}),new HtmlWebpackPlugin({title: "test项目",template: "./src/index.html",}),],
};

修改package.json:

"scripts": {"build": "npx webpack --config ./congfig/webpack.prod.js","server": "npx webpack serve --config ./congfig/webpack.dev.js"},

webpackmerge_152">进一步优化 ,使用webpack-merge抽离公共部分

npm i webpack-merge -D

webpack.com.js 公共部分

const path = require("path");
const { VueLoaderPlugin } = require("vue-loader");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { DefinePlugin } = require("webpack");
module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "../build"),//目录改变,要修改路径},resolve: {extensions: [".js", ".ts", ".tsx", ".jsx", ".cjs", ".vue"],alias: {"@": path.resolve(__dirname, "../src/vue"), //目录改变,要修改路径},},module: {rules: [{test: /\.css$/,use: ["style-loader", "css-loader", "postcss-loader"],},{test: /\.scss$/,use: ["style-loader", "css-loader", "sass-loader"],},{test: /\.(png|jpe?g|gif|svg)$/,type: "asset",parser: {dataUrlCondition: {maxSize: 4 * 1024,},},generator: {filename: "img/[hash][ext]",},},{test: /\.js$/,use: {loader: "babel-loader",},},{test: /\.vue/,use: "vue-loader",},],},plugins: [new VueLoaderPlugin(),new DefinePlugin({BASE_URL: "'./'",}),new HtmlWebpackPlugin({title: "test项目",template: "./src/index.html",}),],};

dev:

const { merge } = require("webpack-merge");
const commenConfig = require("./webpack.com");
module.exports = merge(commenConfig, {mode: "development",devServer: {hot: true,},
});

production:

const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const { merge } = require("webpack-merge");
const commenConfig = require("./webpack.com");
module.exports = merge(commenConfig, {mode: "production",plugins: [new CleanWebpackPlugin()],
});

context

module.exports = {mode: "production",entry: "./src/main.js", // 相对于context的output: {filename: "bundle.js",path: path.resolve(__dirname, "../build"), //目录改变,要修改路径clean: true, //  替代 new CleanWebpackPlugin(),},

entry这里的路径是相对于context的
context用于解析入口和loader。
它默认是相对于webpack的启动目录的
在这里插入图片描述
可以修改context context:"./" 使他相对于当前文件(webpack.com.js),


module.exports = {mode: "production",context:"./"entry: "../src/main.js", // 相对于context的output: {filename: "bundle.js",path: path.resolve(__dirname, "../build"), //目录改变,要修改路径clean: true, //  替代 new CleanWebpackPlugin(),},

http://www.ppmy.cn/news/1425942.html

相关文章

Go 认证与授权(Authentication)

场景 我们应用开发经常会遇到认证和授权问题,比如:ERP系统、OA系统、CRM系统等等,这些系统都需要用户登录后才能访问,如何实现用户登录和权限认证呢? 我们来看下对应的解决方案: Python的装饰器模式 熟…

SQL开窗函数

文章目录 开窗函数(分析函数)分析函数名分析子句聚合类:排序类:偏移类 开窗函数(分析函数) 写法 分析函数名() OVER(分析子句)分析函数名 聚合类: SUM AVG MIN MAX COUNT 排序类:…

【RV1106的ISP使用记录之基础知识】硬件连接关系与设备树的构建

RV1106具备2个mipi csi2 dphy硬件,1个VICAP硬件和1个ISP硬件。其中: 1、mipi csi2 dphy 用于对数据流的解析,支持MIPC,LVDS,DVP三种接口; 2、VICAP用于数据流的捕获; 3、ISP用于对图像数据进行处理; 这三个…

政安晨:【深度学习神经网络基础】(九)—— 在深度学习神经网络反向传播训练中理解梯度

目录 简述 理解梯度 什么是梯度 计算梯度 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 简述 在深度…

2024年4月18号技术面试总结

1.什么是微服务雪崩?微服务雪崩的解决方案? 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。服务A依赖于服务B,服务A依赖于服务D。现在假设,服务D出现了故障! 它访问这个服务D就必然要等待服务D的结果,那因为服务D出现了故障,那必然不…

Stable Diffusion超详细教程!从0-1入门到进阶

一、本地部署 Stable Diffusion 前言 目前市面上比较权威,并能用于工作中的AI绘画软件其实就两款。一个叫Midjourney(简称MJ),另一个叫Stable-Diffusion(简称SD)。MJ需要付费使用,而SD开源免费…

移植speexdsp到OpenHarmony标准系统③

speexdsp移植后已提交至openhamrony sig仓库:https://gitee.com/openharmony-sig/contest/tree/master/2022_OpenHarmony_thirdparty/speexdsp 四、将三方库加入到OpenHarmony的编译体系 根据上一步分析结果,编写gn文件,将三方库加入到OpenH…

达梦数据库的DMRMAN工具介绍

达梦数据库的DMRMAN工具介绍 DMRMAN(DM RECOVERY MANAGER)是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低了用户的…