From a2054e8a7762c77915b15a18e6d988bc71b1138c Mon Sep 17 00:00:00 2001 From: Bryce Osterhaus Date: Thu, 22 Dec 2022 10:08:03 +0400 Subject: [PATCH] feat(npm-scripts): add support for multiple entry points --- .../src/utils/createEsm2AmdIndexBridge.js | 54 +++++++++++-------- .../npm-scripts/src/utils/getMergedConfig.js | 4 ++ .../src/utils/runWebpackAsBundler.js | 17 ++++-- 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/projects/npm-tools/packages/npm-scripts/src/utils/createEsm2AmdIndexBridge.js b/projects/npm-tools/packages/npm-scripts/src/utils/createEsm2AmdIndexBridge.js index c97a1a733e..7fb67037ee 100644 --- a/projects/npm-tools/packages/npm-scripts/src/utils/createEsm2AmdIndexBridge.js +++ b/projects/npm-tools/packages/npm-scripts/src/utils/createEsm2AmdIndexBridge.js @@ -19,7 +19,7 @@ const getBndWebContextPath = require('./getBndWebContextPath'); function createEsm2AmdIndexBridge(projectDir, buildConfig, manifest) { const pkgJson = require(path.join(projectDir, 'package.json')); - const {output} = buildConfig; + const {main, output} = buildConfig; const webContextPath = getBndWebContextPath(projectDir); @@ -34,32 +34,42 @@ function createEsm2AmdIndexBridge(projectDir, buildConfig, manifest) { // level appears under `/o/js/resolved-module/...`. // - const rootDir = pkgJson.name.startsWith('@') ? '../../../..' : '../../..'; + for (const fileName of main) { + const baseName = path.parse(fileName).name; - const bridgeSource = ` -import * as esModule from "${rootDir}${webContextPath}/__liferay__/index.js"; + const rootDir = pkgJson.name.startsWith('@') + ? '../../../..' + : '../../..'; -Liferay.Loader.define( - "${pkgJson.name}@${pkgJson.version}/index", - ['module'], - function (module) { - module.exports = esModule; - } -); -`; + const bridgeSource = ` + import * as esModule from "${rootDir}${webContextPath}/__liferay__/${baseName}.js"; + + Liferay.Loader.define( + "${pkgJson.name}@${pkgJson.version}/${baseName}", + ['module'], + function (module) { + module.exports = esModule; + } + ); + `; - fs.writeFileSync(path.resolve(output, 'index.js'), bridgeSource, 'utf8'); + fs.writeFileSync( + path.resolve(output, baseName + '.js'), + bridgeSource, + 'utf8' + ); - manifest.packages = manifest.packages ?? {}; - manifest.packages['/'] = manifest.packages['/'] ?? {}; - manifest.packages['/'].modules = manifest.packages['/'].modules ?? {}; + manifest.packages = manifest.packages ?? {}; + manifest.packages['/'] = manifest.packages['/'] ?? {}; + manifest.packages['/'].modules = manifest.packages['/'].modules ?? {}; - manifest.packages['/'].modules['index.js'] = { - flags: { - esModule: true, - useESM: true, - }, - }; + manifest.packages['/'].modules['index.js'] = { + flags: { + esModule: true, + useESM: true, + }, + }; + } } module.exports = createEsm2AmdIndexBridge; diff --git a/projects/npm-tools/packages/npm-scripts/src/utils/getMergedConfig.js b/projects/npm-tools/packages/npm-scripts/src/utils/getMergedConfig.js index dd0dab591b..b1e5314d30 100644 --- a/projects/npm-tools/packages/npm-scripts/src/utils/getMergedConfig.js +++ b/projects/npm-tools/packages/npm-scripts/src/utils/getMergedConfig.js @@ -241,6 +241,10 @@ function normalizeNpmscriptsConfig(mergedConfig) { if (mergedConfig.build.exports === undefined) { mergedConfig.build.exports = []; } + + if (!Array.isArray(mergedConfig.build.main)) { + mergedConfig.build.main = [mergedConfig.build.main]; + } } if (Array.isArray(mergedConfig.build?.exports)) { diff --git a/projects/npm-tools/packages/npm-scripts/src/utils/runWebpackAsBundler.js b/projects/npm-tools/packages/npm-scripts/src/utils/runWebpackAsBundler.js index d32bfb5e27..46eda6dcb8 100644 --- a/projects/npm-tools/packages/npm-scripts/src/utils/runWebpackAsBundler.js +++ b/projects/npm-tools/packages/npm-scripts/src/utils/runWebpackAsBundler.js @@ -65,17 +65,24 @@ function getIndexWebpackConfig(projectDir, buildConfig, babelConfig) { return; } - const mainFilePath = path.resolve(projectDir, buildConfig.main); + const mainFilePaths = buildConfig.main.map((main) => + path.resolve(projectDir, main) + ); const {imports} = buildConfig; const externals = convertImportsToExternals(imports, 2); - const webpackConfig = { - entry: { - [`__liferay__/index`]: { + const entry = mainFilePaths.reduce((acc, mainFilePath) => { + return { + ...acc, + [`__liferay__/${path.parse(mainFilePath).name}`]: { import: mainFilePath, }, - }, + }; + }, {}); + + const webpackConfig = { + entry, experiments: { outputModule: true, },