我需要更改我的 react 应用程序的构建过程,以便它创建同一文件的两个不同输出。此时它只创建一个index.js
被缩小的但我想要另一个与 gzip 基本相同的index.js
输出。
是否可以更改 webpack 配置以从同一个文件中获取 2 个文件(一个缩小,另一个 gzip 压缩)entry
?
我需要更改我的 react 应用程序的构建过程,以便它创建同一文件的两个不同输出。此时它只创建一个index.js
被缩小的但我想要另一个与 gzip 基本相同的index.js
输出。
是否可以更改 webpack 配置以从同一个文件中获取 2 个文件(一个缩小,另一个 gzip 压缩)entry
?
如果您想编辑使用您必须对应用Webpack
程序构建的应用程序的配置,然后编写您自己的配置文件。这可能会非常痛苦,并且基本上无效(之一)使用的最大原因..create-react-app
eject
Webpack
create-react-app
我认为在构建完成后编写一个为您执行 gzip 压缩的脚本是最简单的。
我很快就将这些放在一起,以展示如何gzip
使用命令行参数创建文件...
如何使用: node gzipper.js %SOURCE_FILE_PATH% %DEST_DIR_PATH%
node gzipper.js ./build/index.js ./build
const fs = require('fs');
const path = require('path');
const zlib = require('zlib');
const SOURCE = path.resolve(__dirname, process.argv[2]);
const DESTINATION = path.resolve(__dirname, process.argv[3]);
const SOURCE_STATS = fs.lstatSync(SOURCE);
const SOURCE_FILE_NAME = path.basename(SOURCE);
const DESTINATION_STATS = fs.lstatSync(DESTINATION);
if(!SOURCE_STATS.isFile() || !DESTINATION_STATS.isDirectory()) {
throw new Error("[ERROR]::SOURCE must be a file, DESTINATION must be a directory!");
}
const SOURCE_CONTENTS = Buffer.from(fs.readFileSync(SOURCE, 'utf8'));
zlib.gzip(SOURCE_CONTENTS, (error, result) => {
if(error) throw error;
const OUT_PATH = `${DESTINATION}\\${SOURCE_FILE_NAME}.gz`;
fs.writeFileSync(OUT_PATH, result);
});
您可以将脚本添加到package.json
文件中,就像gzip
您添加到npm build
(or yarn build
) 脚本中一样,因此它在构建之后运行..:
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build && npm run gzip",
"gzip": "node gzipper.js ./build/index.js ./build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},