diff --git a/.api/public.d.ts b/.api/public.d.ts index 8f4dde84..ae7d0e5f 100644 --- a/.api/public.d.ts +++ b/.api/public.d.ts @@ -130,9 +130,12 @@ declare module "@cocos/ccbuild" { */ generateDecoratorsForJSB?: boolean; /** - * Whether to generate a json file that contains all output script file paths. + * Whether to generate 'named' register code for systemjs module format. + * SystemJS default register code: System.register([], function(){...}); + * SystemJS named register code: System.register('module_name', [], function(){...}); + * @note It's only avaiable when options.moduleFormat is 'system'. */ - generatePreloadJsList?: boolean; + enableNamedRegisterForSystemJSModuleFormat?: boolean; } export interface Result { /** diff --git a/modules/build-engine/package.json b/modules/build-engine/package.json index 945e90b0..dac0271a 100644 --- a/modules/build-engine/package.json +++ b/modules/build-engine/package.json @@ -19,6 +19,13 @@ "author": "", "license": "ISC", "dependencies": { + "@types/babel__core": "7.1.20", + "@types/babel__generator": "7.6.4", + "@types/babel__traverse": "7.18.2", + "@babel/core": "^7.20.12", + "@babel/parser": "^7.20.13", + "@babel/traverse": "^7.20.13", + "@types/resolve": "^1.20.2", "dedent": "^0.7.0", "fs-extra": "~11.1.1", diff --git a/modules/build-engine/src/engine-js/index.ts b/modules/build-engine/src/engine-js/index.ts index 2a2b6d04..8f8742c1 100644 --- a/modules/build-engine/src/engine-js/index.ts +++ b/modules/build-engine/src/engine-js/index.ts @@ -306,7 +306,7 @@ export async function buildJsEngine(options: Required): Pro // The named-registered format of `System.register('cocos-js/cc.js', [], function() {...})` needs to be generated when the feature of preloading JS list is enabled. // Otherwise, we will generate the default register code without name like `System.register([], function() {...})`. - if (options.generatePreloadJsList) { + if (options.enableNamedRegisterForSystemJSModuleFormat && options.moduleFormat === 'system') { rollupPlugins.push(rpNamedChunk()); } @@ -439,13 +439,8 @@ export async function buildJsEngine(options: Required): Pro const rollupOutput = await rollupBuild.write(rollupOutputOptions); - const outputJSFileNames = []; const validEntryChunks: Record = {}; for (const output of rollupOutput.output) { - if (options.generatePreloadJsList && output.fileName.endsWith('js')) { - outputJSFileNames.push(output.fileName); - } - if (output.type === 'chunk') { if (output.isEntry) { const chunkName = output.name; @@ -456,10 +451,6 @@ export async function buildJsEngine(options: Required): Pro } } - if (options.generatePreloadJsList) { - fs.outputFileSync(ps.join(options.out, 'engine-js-list.json'), JSON.stringify(outputJSFileNames, undefined, 2)); - } - Object.assign(result.exports, validEntryChunks); result.dependencyGraph = {}; diff --git a/modules/build-engine/src/engine-js/rollup-plugins/systemjs-named-register-plugin.ts b/modules/build-engine/src/engine-js/rollup-plugins/systemjs-named-register-plugin.ts index 5837bfd5..2ff25d10 100644 --- a/modules/build-engine/src/engine-js/rollup-plugins/systemjs-named-register-plugin.ts +++ b/modules/build-engine/src/engine-js/rollup-plugins/systemjs-named-register-plugin.ts @@ -12,7 +12,6 @@ function toNamedRegister( { types }: typeof babel, options: Options, ): babel.PluginObj { - // options.name 为上面代码传递进来的 chunkId if (!options || !options.name) { throw new Error('\'name\' options is required.'); } @@ -24,8 +23,8 @@ function toNamedRegister( types.isIdentifier(path.node.callee.object) && path.node.callee.object.name === 'System' && types.isIdentifier(path.node.callee.property) && path.node.callee.property.name === 'register' && path.node.arguments.length === 2) { - // 当发现 System.register([], function (exports, module) {}); 的时候,插入当前 chunk 的名称,变为: - // System.register('my_chunk_name', [], function (exports, module) {}); + // Change `System.register([], function (exports, module) {});` to + // `System.register('my_chunk_name', [], function (exports, module) {});` path.node.arguments.unshift(types.stringLiteral(options.name)); } }, @@ -45,10 +44,10 @@ export function rpNamedChunk(): rollup.Plugin { renderChunk: async function(this, code, chunk, options): Promise { const chunkId = getChunkUrl(chunk); - // 这里输入为 System.register([], function(){...}); 格式的 code - // 输出的 transformResult.code 为 System.register('chunk_id', [], function(){...}); 格式 + // Input format: System.register([], function(){...}); + // Output format: transformResult.code 为 System.register('chunk_id', [], function(){...}); const transformResult = await babel.transformAsync(code, { - sourceMaps: true, // 这里需要强制为 true 吗? + sourceMaps: true, compact: false, plugins: [[toNamedRegister, { name: chunkId }]], }); diff --git a/modules/build-engine/src/index.ts b/modules/build-engine/src/index.ts index edf87dd1..d6b681e2 100644 --- a/modules/build-engine/src/index.ts +++ b/modules/build-engine/src/index.ts @@ -204,9 +204,12 @@ export namespace buildEngine { // forceJitValue?: boolean, /** - * Whether to generate a json file that contains all output script file paths. + * Whether to generate 'named' register code for systemjs module format. + * SystemJS default register code: System.register([], function(){...}); + * SystemJS named register code: System.register('module_name', [], function(){...}); + * @note It's only avaiable when options.moduleFormat is 'system'. */ - generatePreloadJsList?: boolean; + enableNamedRegisterForSystemJSModuleFormat?: boolean; } export interface Result { diff --git a/package-lock.json b/package-lock.json index 3bef4da5..a42c5b4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@cocos/ccbuild", - "version": "2.2.7", + "version": "2.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@cocos/ccbuild", - "version": "2.2.7", + "version": "2.2.8", "hasInstallScript": true, "license": "MIT", "workspaces": [ @@ -58,11 +58,17 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@babel/core": "^7.20.12", + "@babel/parser": "^7.20.13", + "@babel/traverse": "^7.20.13", "@ccbuild/bundler": "*", "@ccbuild/modularize": "*", "@ccbuild/stats-query": "*", "@ccbuild/transformer": "*", "@ccbuild/utils": "*", + "@types/babel__core": "7.1.20", + "@types/babel__generator": "7.6.4", + "@types/babel__traverse": "7.18.2", "@types/resolve": "^1.20.2", "dedent": "^0.7.0", "fs-extra": "~11.1.1", diff --git a/package.json b/package.json index 4387485e..33af6e26 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cocos/ccbuild", - "version": "2.2.7", + "version": "2.2.8", "description": "The next generation of build tool for Cocos engine.", "main": "./lib/index.js", "types": "./lib/index.d.ts",