@gdjiami/cli
Version:
CLI for build front end project.
101 lines (100 loc) • 4.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
/**
* electron 主线程
*/
var webpack_1 = tslib_1.__importDefault(require("webpack"));
var path_1 = tslib_1.__importDefault(require("path"));
var babelOptions_1 = tslib_1.__importDefault(require("./utils/babelOptions"));
var terserPluginOptions_1 = tslib_1.__importDefault(require("./utils/terserPluginOptions"));
var forkTsCheckerOption_1 = tslib_1.__importDefault(require("./utils/forkTsCheckerOption"));
var cacheOptions_1 = tslib_1.__importDefault(require("./utils/cacheOptions"));
var constants_1 = require("./constants");
var TerserPlugin = require('terser-webpack-plugin');
var ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
var WriteFilePlugin = require('write-file-webpack-plugin');
var nodeExternals = require('webpack-node-externals');
var configure = function (environments, pkg, paths, argv) {
var isProduction = environments.raw.NODE_ENV === 'production';
var $ = function (development, production) { return (isProduction ? production : development); };
var context = paths.appSrc;
var shouldUseSourceMap = environments.raw.SOURCE_MAP !== 'false';
var babelOptions = babelOptions_1.default(environments.raw, argv.jmOptions, paths, true);
var babelLoders = [
// should I use cache-loader here? see more in https://github.com/webpack-contrib/cache-loader/issues/1#issuecomment-297994952
{
loader: require.resolve('babel-loader'),
options: babelOptions,
},
];
var webpackConfig = {
name: 'main',
mode: $('development', 'production'),
target: 'electron-main',
devtool: shouldUseSourceMap && 'source-map',
entry: paths.appElectronMain,
context: context,
output: {
path: paths.appDist,
pathinfo: true,
filename: 'main.js',
libraryTarget: 'commonjs2',
devtoolModuleFilenameTemplate: '[absolute-resource-path]',
},
externals: [
nodeExternals({
whitelist: tslib_1.__spreadArrays((argv.jmOptions.electronExternalsWhitelist || []), constants_1.ExternalWhiteList),
}),
],
resolve: {
modules: ['node_modules'],
extensions: ['.ts', '.tsx', '.js', '.jsx'],
alias: tslib_1.__assign(tslib_1.__assign({}, (argv.jmOptions.alias || {})), {
// 可以直接使用~访问相对于源代码目录的模块,优化查找效率
// 如 ~/components/Button
'~': context }),
},
resolveLoader: {
modules: [paths.ownNodeModules, 'node_modules'],
},
module: {
rules: [
{
test: /\.(ts|tsx|js|jsx)$/,
include: paths.appPath,
exclude: /node_modules/,
use: tslib_1.__spreadArrays([
{
loader: require.resolve('cache-loader'),
options: cacheOptions_1.default('babel-loader-main', environments.raw, paths),
}
], babelLoders),
},
],
},
optimization: {
minimize: isProduction,
minimizer: [new TerserPlugin(terserPluginOptions_1.default(shouldUseSourceMap))],
},
plugins: [
!isProduction &&
new WriteFilePlugin({
test: /main\.js$/,
}),
!isProduction &&
new ForkTsCheckerWebpackPlugin(forkTsCheckerOption_1.default(paths, environments.raw, argv.jmOptions, {
watch: paths.appElectronMain,
reportFiles: [
path_1.default.basename(paths.appElectronMain) + "/**/*.@(ts|tsx)",
'!**/__tests__/**',
'!**/?(*.)(spec|test).*',
],
})),
new webpack_1.default.DefinePlugin(environments.stringified),
].filter(Boolean),
node: false,
};
return webpackConfig;
};
exports.default = configure;