UNPKG

@gdjiami/cli

Version:

CLI for build front end project.

101 lines (100 loc) 4.38 kB
"use strict"; 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;