欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 编写webpack插件自动找到大文件并上传到指定服务器

编写webpack插件自动找到大文件并上传到指定服务器

2024/10/24 11:20:07 来源:https://blog.csdn.net/weixin_42254016/article/details/142470394  浏览:    关键词:编写webpack插件自动找到大文件并上传到指定服务器

编写一个Webpack插件来自动找出大文件并上传到指定服务器

1、创建一个Webpack插件。

2、在插件中监听webpack的特定钩子,比如emit。

3、在emit钩子中,你可以获取编译后的assets,并计算出哪些文件超过了你定义的大小阈值。

4、使用Node.js的http模块或第三方库(如request)发送POST请求上传文件。

以下是一个简单的Webpack插件示例代码:

const http = require('http'); // 或者使用 'https' 如果是https服务器
const fs = require('fs');
const path = require('path');class UploadLargeFilesWebpackPlugin {constructor(options) {this.options = options;}apply(compiler) {compiler.hooks.emit.tapAsync('UploadLargeFilesWebpackPlugin', (compilation, callback) => {const largeFileSize = this.options.largeFileSize || (1024 * 1024); // 默认1MBconst uploadUrl = this.options.uploadUrl;Object.keys(compilation.assets).forEach((filename) => {const asset = compilation.assets[filename];const fileSize = asset.size();if (fileSize > largeFileSize) {const filePath = path.resolve(compiler.options.output.path, filename);const fileData = fs.readFileSync(filePath);const uploadRequest = http.request(uploadUrl, {method: 'POST',headers: {'Content-Type': 'application/octet-stream','Content-Length': fileData.length}}, (response) => {response.on('data', (chunk) => {console.log(`BODY: ${chunk}`);});response.on('end', () => {console.log('Upload completed');});});uploadRequest.on('error', (e) => {console.error(`Problem with request: ${e.message}`);});uploadRequest.write(fileData);uploadRequest.end();}});callback();});}
}module.exports = UploadLargeFilesWebpackPlugin;

使用插件时,在webpack配置文件中如下配置:

const UploadLargeFilesWebpackPlugin = require('./path/to/UploadLargeFilesWebpackPlugin');module.exports = {// ... 其他webpack配置plugins: [new UploadLargeFilesWebpackPlugin({largeFileSize: 5242880, // 5MBuploadUrl: 'http://yourserver.com/upload'})]
};

确保替换http://yourserver.com/upload为你的实际上传服务器地址,并且服务器能够处理POST请求并接收文件数据。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com