filecat
Version:
FileCat Server Manager
80 lines (75 loc) • 3.79 kB
JavaScript
const path = require('path');
const nodeExternals = require('webpack-node-externals');
const webpack = require('webpack');
const TerserPlugin = require("terser-webpack-plugin");
const package_data = require("../../package.json")
const {base_url} = require("./env");
const common_plugins = {
'process.env.NODE_ENV': JSON.stringify('production'),
'process.env.version': JSON.stringify(package_data.version),
'process.env.base_url': JSON.stringify(base_url),
'process.env.run_env': JSON.stringify("npm") // 必须用 JSON.stringify
}
// 给js代码注入一些环境变量
const plugins = [
new webpack.DefinePlugin(common_plugins),
// new webpack.DefinePlugin({
// 'process.platform': JSON.stringify(process.platform) // 这里将 process.platform 替换为实际的值 在遇到动态打包的时候require 可以判断类型 函数内部的无法判断
// }),
// 不要一些Debug的二进制文件
new webpack.IgnorePlugin({
resourceRegExp: /Debug/,
})
];
function get_exe_plugins() {
common_plugins['process.env.run_env'] = JSON.stringify("exe")
return [
new webpack.DefinePlugin(common_plugins),
new webpack.IgnorePlugin({
resourceRegExp: /Debug/,
})
]
}
// 处理 node 二进制文件的webpack rules
const _node_rules = [
{
test: /\.node$/,
loader: 'node-loader',
options: {
name: '[path][name].[ext]'
}
}
]
// 这些不需要打包,会被安装,运行的时候再使用
// 动态的 加载需要使用 node_require=eval("require") 原本的动态函数内的require会被替换成webpack的 __webpack_require__
// webpack会修改函数的位置,这也会导致一些看起来本来没有问题的 变量不存在问题
const npm_externals = [
{
'@aws-sdk/client-s3': 'S3', // 假设全局变量名为 S3 是 @aws-sdk/client-s3带 @符号的话会无法压缩
// 'routing-controllers':'commonjs routing-controllers', // 有一些动态引入(他需要的动态引入也需要导入),或者含有.node(使用用户自己安装编译的版本) 无法被打包 直接忽略这个包
'cors': 'commonjs cors', // 动态加载无法打包 如果需要可以使用 import "cors"
'@koa/cors': 'commonjs @koa/cors',
'@xiaobaidadada/node-pty-prebuilt': 'commonjs @xiaobaidadada/node-pty-prebuilt',
'@xiaobaidadada/node-tuntap2-wintun': 'commonjs @xiaobaidadada/node-tuntap2-wintun',
'node-process-watcher': 'commonjs node-process-watcher',
'@xiaobaidadada/ssh2-prebuilt': 'commonjs @xiaobaidadada/ssh2-prebuilt',
'better-sqlite3/build/Release/better_sqlite3.node': 'commonjs better-sqlite3/build/Release/better_sqlite3.node',
'better-sqlite3': 'commonjs better-sqlite3',
'7zip-min': 'commonjs 7zip-min',
}
]
const pkg_externals = [
{
'@aws-sdk/client-s3': 'S3', // 假设全局变量名为 S3 是 @aws-sdk/client-s3带 @符号的话会无法压缩
'cors': 'commonjs cors',
'@koa/cors': 'commonjs @koa/cors', // 动态加载无法打包 如果需要可以使用 import "cors"
// 'routing-controllers':'commonjs routing-controllers', // 有一些动态引入(他需要的动态引入也需要导入),或者含有.node(使用用户自己安装编译的版本) 无法被打包 直接忽略这个包
'7zip-min': 'commonjs 7zip-min',
}
]
module.exports.plugins = plugins;
module.exports.common_plugins = common_plugins
module.exports.get_exe_plugins = get_exe_plugins;
module.exports._node_rules = _node_rules;
module.exports.npm_externals = npm_externals;
module.exports.pkg_externals = pkg_externals;