UNPKG

@modern-js/module-tools-v2

Version:

The meta-framework suite designed from scratch for frontend-focused modern web development.

340 lines (337 loc) 12.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.runBuildTask = exports.generatorDts = exports.buildLib = exports.buildInTsProject = exports.buildInJsProject = void 0; const _excluded = ["path"]; function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const runBuildTask = async (options, api) => { const { buildConfig, context } = options; const { appDirectory, isTsProject } = context; if (isTsProject) { await buildInTsProject(options, api); } else { await buildInJsProject(options, api); } const { copyTask } = await Promise.resolve().then(() => _interopRequireWildcard(require("./copy"))); await copyTask(buildConfig, { appDirectory }); }; exports.runBuildTask = runBuildTask; const buildInTsProject = async (options, api) => { var _buildCmdOptions$watc; const { buildConfig, buildCmdOptions, sourceConfig, styleConfig } = options; const dts = buildCmdOptions.dts ? buildConfig.dts : false; const watch = (_buildCmdOptions$watc = buildCmdOptions.watch) !== null && _buildCmdOptions$watc !== void 0 ? _buildCmdOptions$watc : false; // const { verifyTsConfigPaths } = await import('../utils/dts'); // const { defaultTsConfigPath } = await import('../constants/dts'); // await verifyTsConfigPaths( // buildConfig.dts // ? buildConfig.dts.tsconfigPath // : path.join(appDirectory, defaultTsConfigPath), // sourceConfig.alias, // ); if (dts === false) { await buildLib(buildConfig, api, { sourceConfig, watch, styleConfig }); } else { const tasks = dts.only ? [generatorDts] : [buildLib, generatorDts]; const { default: pMap } = await Promise.resolve().then(() => _interopRequireWildcard(require("../../compiled/p-map"))); await pMap(tasks, async task => { await task(buildConfig, api, { sourceConfig, watch, dts, styleConfig }); }); } }; exports.buildInTsProject = buildInTsProject; const buildInJsProject = async (options, api) => { var _buildCmdOptions$watc2; const { buildConfig, buildCmdOptions, sourceConfig, styleConfig } = options; const dts = buildCmdOptions.dts ? buildConfig.dts : false; const watch = (_buildCmdOptions$watc2 = buildCmdOptions.watch) !== null && _buildCmdOptions$watc2 !== void 0 ? _buildCmdOptions$watc2 : false; if (dts !== false && dts.only) { return; } await buildLib(buildConfig, api, { sourceConfig, watch, styleConfig }); }; exports.buildInJsProject = buildInJsProject; const generatorDts = async (config, api, options) => { const { runRollup, runTsc } = await Promise.resolve().then(() => _interopRequireWildcard(require("./dts"))); const { sourceConfig, watch, dts } = options; const { buildType } = config; const { appDirectory } = api.useAppContext(); const { tsconfigPath, distPath } = dts; if (buildType === 'bundle') { const { bundleOptions: { entry } } = config; const { getFinalExternals } = await Promise.resolve().then(() => _interopRequireWildcard(require("../utils/builder"))); const finalExternals = await getFinalExternals(config, { appDirectory }); await runRollup({ distDir: distPath, watch, externals: finalExternals, entry, tsconfigPath }); } else { const { sourceDir } = config.bundlelessOptions; await runTsc({ appDirectory, alias: sourceConfig.alias, distAbsPath: distPath, watch, tsconfigPath, sourceDir }); } }; exports.generatorDts = generatorDts; const buildLib = async (config, api, options) => { const { sourceConfig, watch, styleConfig } = options; const { target, buildType, sourceMap, format, path: distPath, asset } = config; const { appDirectory, srcDirectory } = api.useAppContext(); // sourceConfig const { envVars, globalVars, alias: userAlias } = sourceConfig; const envVarsDefine = [...(envVars || [])].reduce((memo, name) => { memo[`process.env.${name}`] = JSON.stringify(process.env[name]); return memo; }, {}); const globalVarsDefine = Object.keys(globalVars || {}).reduce((memo, name) => { memo[name] = globalVars ? JSON.stringify(globalVars[name]) : ''; return memo; }, {}); const define = _objectSpread(_objectSpread({}, envVarsDefine), globalVarsDefine); const defaultAlias = { '@': srcDirectory }; const { applyOptionsChain, ensureAbsolutePath } = await Promise.resolve().then(() => _interopRequireWildcard(require('@modern-js/utils'))); const mergedAlias = applyOptionsChain(defaultAlias, userAlias); const alias = Object.keys(mergedAlias).reduce((o, name) => { return _objectSpread(_objectSpread({}, o), {}, { [name]: ensureAbsolutePath(appDirectory, mergedAlias[name]) }); }, {}); const { getFinalExternals } = await Promise.resolve().then(() => _interopRequireWildcard(require("../utils/builder"))); const { es5Plugin } = await Promise.resolve().then(() => _interopRequireWildcard(require('@modern-js/libuild-plugin-es5'))); const { umdPlugin } = await Promise.resolve().then(() => _interopRequireWildcard(require('@modern-js/libuild-plugin-umd'))); const plugins = target === 'es5' ? [es5Plugin()] : []; const { watchPlugin, externalPlugin } = await Promise.resolve().then(() => _interopRequireWildcard(require("../utils/libuild-plugins"))); plugins.push(watchPlugin(config)); const _ref = asset !== null && asset !== void 0 ? asset : {}, { path: outdir } = _ref, resetAsset = _objectWithoutProperties(_ref, _excluded); const commonLiBuildConfig = { root: appDirectory, watch, target, sourceMap, format, outdir: distPath, define, style: styleConfig, resolve: { alias }, asset: _objectSpread(_objectSpread({}, resetAsset), {}, { outdir }), plugins }; if (buildType === 'bundle') { const finalExternals = await getFinalExternals(config, { appDirectory }); const { jsx, bundleOptions: { entry, platform, splitting, minify, entryNames, globals, metafile, umdModuleName } } = config; if (format === 'umd') { plugins.push(umdPlugin(umdModuleName ? { moduleName: umdModuleName } : undefined)); } plugins.push(externalPlugin(config, { appDirectory })); const bundleConfig = _objectSpread(_objectSpread({}, commonLiBuildConfig), {}, { platform, input: entry, jsx, metafile, globals, entryNames, splitting, sourceMap, minify, external: finalExternals }); // console.info('bundleConfig', bundleConfig); try { const { Libuilder } = await Promise.resolve().then(() => _interopRequireWildcard(require('@modern-js/libuild'))); const builder = await Libuilder.create(bundleConfig); await builder.build(); if (watch) { const { watchSectionTitle } = await Promise.resolve().then(() => _interopRequireWildcard(require("../utils/log"))); const { SectionTitleStatus } = await Promise.resolve().then(() => _interopRequireWildcard(require("../constants/log"))); const titleText = `[Bundle: ${format}_${target}]`; console.info(await watchSectionTitle(titleText, SectionTitleStatus.Success)); } } catch (e) { const { InternalBuildError } = await Promise.resolve().then(() => _interopRequireWildcard(require("../error"))); throw new InternalBuildError(e, { target, format, buildType: 'bundle' }); } } else { const { bundlelessOptions: { sourceDir } } = config; const bundlelessConfig = _objectSpread(_objectSpread({}, commonLiBuildConfig), {}, { input: [sourceDir], bundle: false, outbase: sourceDir }); try { const { Libuilder } = await Promise.resolve().then(() => _interopRequireWildcard(require('@modern-js/libuild'))); const builder = await Libuilder.create(bundlelessConfig); await builder.build(); if (watch) { const { watchSectionTitle } = await Promise.resolve().then(() => _interopRequireWildcard(require("../utils/log"))); const { SectionTitleStatus } = await Promise.resolve().then(() => _interopRequireWildcard(require("../constants/log"))); const titleText = `[Bundleless: ${format}_${target}]`; console.info(await watchSectionTitle(titleText, SectionTitleStatus.Success)); } } catch (e) { const { InternalBuildError } = await Promise.resolve().then(() => _interopRequireWildcard(require("../error"))); throw new InternalBuildError(e, { target, format, buildType: 'bundleless' }); } } }; exports.buildLib = buildLib; //# sourceMappingURL=build.js.map