javascript - 如果文件在本地主机上,则使用 webpack 复制文件,否则缩小
问题描述
我是 Webpack 的新手。
我的团队正在使用 Golang 作为服务器,并开始在前端使用 ReactJS + MobX。我们使用 Webpack 将所有代码捆绑/转译到每页一个捆绑文件中。(它是多页应用程序。)
我的 PM 让我考虑将所有这些前端代码从static
名为 的新文件夹中移动src
,并执行以下操作:
设置环境,以便:
- 如果运行 localhost,只需将文件复制到该文件夹(我们正在调试它)
- 否则,将文件缩小到该文件夹(我们不希望最终用户能够对我们的东西进行逆向工程/查看其源代码)
由于 Golang 运行的是服务器而不是 Webpack(我们的用例只是开发时的转译),有没有办法让 Webpack 像这样工作?
注意:我们的入口文件不一定在同一级别,但具有类似的路径static/js/[relative path of one or more levels]/entry.js
解决方案
使用webpack 合并你可以做到这一点
基本上你需要3个文件
- 主 webpack.config.js 文件
- 用于开发环境的 webpack.dev.js
- webpack.prod.js 用于生产环境
示例:webpack.dev.js
const merge = require('webpack-merge');
const baseConfig = require('./webpack.config.js');
const webpack = require("webpack");
module.exports = merge(baseConfig, {
plugins: [
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('development'),
'BASE_URL': JSON.stringify('http://localhost:5000/')
}
})
],
watch: true
});
webpack.prod.js。您可以看到我在 prod 模式下使用了一些优化包,例如 OptimizeCSSAssetsPlugin、CompressionPlugin、UglifyJsPlugin 来对文件内容进行 uglify 和 gzip 压缩以提高性能。您可以根据需要进行相应调整。
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CompressionPlugin = require("compression-webpack-plugin");
const merge = require('webpack-merge');
const baseConfig = require('./webpack.config.js');
const webpack = require("webpack");
module.exports = merge(baseConfig, {
optimization: {
minimizer: [
new UglifyJsPlugin({
cache: true,
parallel: true,
sourceMap: false,
extractComments: 'all',
uglifyOptions: {
compress: true,
output: null
}
}),
new OptimizeCSSAssetsPlugin({
cssProcessorOptions: {
safe: true,
discardComments: {
removeAll: true,
},
},
})
]
},
plugins: [
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production'),
'BASE_URL': JSON.stringify('a/')
}
}),
new CompressionPlugin({
test: /\.(js|css)/
}),
new UglifyJsPlugin(),
]
});
要运行它,只需在 package.json 中使用这 2 个命令
"prod": "webpack -p --mode=production --config webpack.prod.js",
"start": "webpack --mode=development --config webpack.dev.js",
推荐阅读
- c++ - 内联函数选择标准
- java - FLINK CEP (Java 8) - 通过匹配模式持久化“身份”
- ansible - 有条件的事实
- vba - 更改修订视图后不正确的段落样式属性
- python - 如何使碰撞更具 OOP 风格
- git - Git - 从父存储库中提取时如何处理本地重命名文件中的更改
- java - 为什么 ChronoLocalDate 和 ChronoLocalDateTime 被设计成完全不同的接口?
- java - 如何停止在 java 组合框中复制项目
- data-structures - 这段代码的空间复杂度是多少
- python - 使用 pytorch (LSTM) 预测未来 60 天