@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
JavaScript
;
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