UNPKG

build-plugin-rax-app

Version:

The basic webpack configuration for rax project

175 lines 7.14 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var getEnhancedWebpackConfig = require('@builder/user-config').getEnhancedWebpackConfig; var getWebpackConfig = require('rax-webpack-config').default; var getBabelConfig = require('rax-babel-config'); var ProgressPlugin = require('webpackbar'); var path = require('path'); var CopyWebpackPlugin = require('copy-webpack-plugin'); var fs = require('fs-extra'); var ExportsFieldWebpackPlugin = require('@builder/exports-field-webpack-plugin').default; var isWebpack4 = require('@builder/compat-webpack4').isWebpack4; var _a = require('./constants'), MINIAPP_PLATFORMS = _a.MINIAPP_PLATFORMS, SSR = _a.SSR, DOCUMENT = _a.DOCUMENT; module.exports = function (api, _a) { var target = _a.target, babelConfigOptions = _a.babelConfigOptions, _b = _a.progressOptions, progressOptions = _b === void 0 ? {} : _b; var context = api.context, onGetWebpackConfig = api.onGetWebpackConfig; var rootDir = context.rootDir, command = context.command, userConfig = context.userConfig; var mpa = false; // subPackages is miniapp config, mpa is web/weex/kraken config // document and ssr need be the same as web if (MINIAPP_PLATFORMS.includes(target)) { mpa = (userConfig[target] || {}).subPackages; } else if ([SSR, DOCUMENT].includes(target)) { mpa = (userConfig.web || {}).mpa; } else if (userConfig[target]) { mpa = userConfig[target].mpa; } var mode = command === 'start' ? 'development' : 'production'; var babelConfig = getBabelConfig(babelConfigOptions); var webpackConfig = getWebpackConfig({ rootDir: rootDir, mode: mode, babelConfig: babelConfig, target: target, webpackVersion: context.webpack.version, }); var enhancedWebpackConfig = getEnhancedWebpackConfig(api, { target: target, webpackConfig: webpackConfig, babelConfig: babelConfig, }); // dynamic import script cross origin enhancedWebpackConfig.output.crossOriginLoading('anonymous'); enhancedWebpackConfig.module .rule('appJSON') .type('javascript/auto') .test(/(\/|\\)app\.json$/) .use('swc-loader') .loader(require.resolve('@builder/swc-loader')) .options({ jsc: { target: 'es5', }, module: { type: 'commonjs', ignoreDynamic: true, }, }) .end() .use('route-loader') .loader(require.resolve('./Loaders/RouteLoader')) .options({ target: target, mpa: mpa, }) .end(); enhancedWebpackConfig .plugin('ProgressPlugin') .use(ProgressPlugin, [Object.assign({ color: '#F4AF3D' }, progressOptions)]); // Copy public dir if (fs.existsSync(path.resolve(rootDir, 'public'))) { enhancedWebpackConfig.plugin('CopyWebpackPlugin').use(CopyWebpackPlugin, [[]]); } onGetWebpackConfig(target, function (config) { // Set public url after developer has set public path // Get public path var publicUrl = config.output.get('publicPath'); // Developer will use process.env.PUBLIC_URL + '/logo.png', so it need remove last / if (publicUrl && publicUrl.endsWith('/')) { publicUrl = publicUrl.substring(0, publicUrl.length - 1); } config.plugin('DefinePlugin').tap(function (args) { return [ Object.assign.apply(Object, __spreadArray(__spreadArray([{}], args, false), [{ 'process.env.PUBLIC_URL': JSON.stringify(publicUrl), 'process.env.WDS_SOCKET_PATH': '"/ws"', }], false)), ]; }); var _a = userConfig.outputDir, outputDir = _a === void 0 ? 'build' : _a, swc = userConfig.swc; // Copy public dir if (config.plugins.has('CopyWebpackPlugin')) { config.plugin('CopyWebpackPlugin').tap(function (_a) { var copyList = _a[0]; return [ copyList.concat([ { from: path.resolve(rootDir, 'public'), to: path.resolve(rootDir, outputDir, target), }, ]), ]; }); } // Add condition names if (isWebpack4) { config.plugin('ExportsFieldWebpackPlugin').use(ExportsFieldWebpackPlugin, [ { // In webpack4, import, require, node for fallback conditionNames: [target, 'import', 'require', 'node'], }, ]); // Set dev server content base config.devServer.contentBase(path.join(rootDir, outputDir)); // Reset config target config.target('web'); } else { config.resolve.merge({ // Webpack5+ will dynamic return default value with ..., which depends on build task target conditionNames: [target, '...'], }); // Set dev server content base config.devServer.merge({ static: { directory: path.join(rootDir, outputDir), }, }); } // Set output path config.output.path(path.resolve(rootDir, outputDir, target)); // Only save target code var keepPlatform = ['ssr', 'document'].includes(target) ? 'node' : target; ['jsx', 'tsx'].forEach(function (ruleName) { config.module .rule(ruleName) .use('platform-loader') .loader(require.resolve('rax-platform-loader')) .options({ platform: keepPlatform, }); }); if (swc) { ['jsx', 'tsx'].forEach(function (suffix) { config.module .rule("swc-".concat(suffix)) .use('swc-loader') .tap(function (options) { return __assign(__assign({}, options), { keepPlatform: keepPlatform }); }); }); } // TODO: hack for tslib wrong exports field https://github.com/microsoft/tslib/issues/161 config.resolve.alias.set('tslib', 'tslib/tslib.es6.js'); }); return enhancedWebpackConfig; }; //# sourceMappingURL=base.js.map