diff --git a/BUILD.gn b/BUILD.gn index a416f8c4d80a24152f74a285dc4124db125e245f..eab94c563e85027e771979179b00781ac864f394 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -73,19 +73,21 @@ action("build_ace_loader_library") { ] } +ace_loader_sources = [ + "ace-loader/.npmignore", + "ace-loader/babel.config.js", + "ace-loader/index.js", + "ace-loader/main.product.js", + "ace-loader/npm-install.js", + "ace-loader/package-lock.json", + "ace-loader/package.json", + "ace-loader/sample", + "ace-loader/webpack.lite.config.js", + "ace-loader/webpack.rich.config.js", +] + ohos_copy("ace_loader") { - sources = [ - "ace-loader/.npmignore", - "ace-loader/babel.config.js", - "ace-loader/index.js", - "ace-loader/main.product.js", - "ace-loader/npm-install.js", - "ace-loader/package-lock.json", - "ace-loader/package.json", - "ace-loader/sample", - "ace-loader/webpack.lite.config.js", - "ace-loader/webpack.rich.config.js", - ] + sources = ace_loader_sources outputs = [ target_out_dir + "/$target_name/{{source_file_part}}" ] module_source_dir = target_out_dir + "/$target_name/" module_install_name = "" @@ -112,3 +114,30 @@ ohos_copy("previewer_copy") { module_source_dir = target_out_dir + "/previewer/" module_install_name = "" } + +ace_loader_ark_dir = + get_label_info(":ace_loader", "target_out_dir") + "/ace_loader_ark" +ohos_copy("ace_loader_ark") { + sources = ace_loader_sources + outputs = [ target_out_dir + "/$target_name/{{source_file_part}}" ] + module_source_dir = target_out_dir + "/$target_name/" + license_file = "//third_party/weex-loader/NOTICE" +} + +ohos_copy("ace_loader_ark_hap") { + deps = [ + ":ace_loader", + ":ace_loader_ark", + ":build_ace_loader_library", + ] + sources = [ ace_loader_lib_dir ] + outputs = [ ace_loader_ark_dir + "/lib" ] + license_file = "//third_party/weex-loader/NOTICE" +} + +ohos_copy("ace_loader_node_modules") { + deps = [ ":ace_loader_ark_hap" ] + sources = [ "//developtools/ace-js2bundle/ace-loader/node_modules" ] + outputs = [ ace_loader_ark_dir + "/node_modules" ] + license_file = "//third_party/weex-loader/NOTICE" +} diff --git a/ace-loader/src/genAbc-plugin.js b/ace-loader/src/genAbc-plugin.js index 2f7b2ef6d52a07a8ae0be3673f1b2e447c71dd1e..d57acd052571fa7dbf30ac1f115f5b357fa83cef 100644 --- a/ace-loader/src/genAbc-plugin.js +++ b/ace-loader/src/genAbc-plugin.js @@ -13,124 +13,121 @@ * limitations under the License. */ -const fs = require('fs') -const path = require('path') -const process = require('child_process') +const fs = require('fs'); +const path = require('path'); +const process = require('child_process'); -const arkDir = path.join(__dirname, '..', 'bin', 'ark'); const forward = '(global.___mainEntry___ = function (globalObjects) {' + '\n' + - ' var define = globalObjects.define;' + '\n' + - ' var require = globalObjects.require;' + '\n' + - ' var bootstrap = globalObjects.bootstrap;' + '\n' + - ' var register = globalObjects.register;' + '\n' + - ' var render = globalObjects.render;' + '\n' + - ' var $app_define$ = globalObjects.$app_define$;' + '\n' + - ' var $app_bootstrap$ = globalObjects.$app_bootstrap$;' + '\n' + - ' var $app_require$ = globalObjects.$app_require$;' + '\n' + - ' var history = globalObjects.history;' + '\n' + - ' var Image = globalObjects.Image;' + '\n' + - ' var OffscreenCanvas = globalObjects.OffscreenCanvas;' + '\n' + - ' (function(global) {' + '\n' + - ' "use strict";' + '\n' -const last = '\n' + '})(this.__appProto__);' + '\n' + '})' -const firstFileEXT = '_.js' -let output -let webpackPath -let isWin = false -let isMac = false -let isDebug = false + ' var define = globalObjects.define;' + '\n' + + ' var require = globalObjects.require;' + '\n' + + ' var bootstrap = globalObjects.bootstrap;' + '\n' + + ' var register = globalObjects.register;' + '\n' + + ' var render = globalObjects.render;' + '\n' + + ' var $app_define$ = globalObjects.$app_define$;' + '\n' + + ' var $app_bootstrap$ = globalObjects.$app_bootstrap$;' + '\n' + + ' var $app_require$ = globalObjects.$app_require$;' + '\n' + + ' var history = globalObjects.history;' + '\n' + + ' var Image = globalObjects.Image;' + '\n' + + ' var OffscreenCanvas = globalObjects.OffscreenCanvas;' + '\n' + + ' (function(global) {' + '\n' + + ' "use strict";' + '\n'; +const last = '\n' + '})(this.__appProto__);' + '\n' + '})'; +const firstFileEXT = '_.js'; +let output; +let isWin = false; +let isMac = false; +let isDebug = false; +let arkDir; +let nodeJs; class GenAbcPlugin { - constructor(output_, webpackPath_, isDebug_) { - output = output_ - webpackPath = webpackPath_ - isDebug = isDebug_ - } - apply(compiler) { - if (fs.existsSync(path.resolve(webpackPath, 'ark/build-win'))) { - isWin = true - } else { - if (fs.existsSync(path.resolve(webpackPath, 'ark/build-mac'))) { - isMac = true - } else { - if (!fs.existsSync(path.resolve(webpackPath, 'ark/build'))) { - console.error('\u001b[31m', `find build fail`, '\u001b[39m') - return - } - } + constructor(output_, arkDir_, nodeJs_, isDebug_) { + output = output_; + arkDir = arkDir_; + nodeJs = nodeJs_; + isDebug = isDebug_; } - compiler.hooks.emit.tap('GenAbcPlugin', (compilation) => { - const assets = compilation.assets - const keys = Object.keys(assets) - keys.forEach(key => { - // choice *.js - if (output && webpackPath && path.extname(key) === '.js') { - let newContent = assets[key].source() - if (key.search('./workers/') !== 0) { - newContent = forward + newContent + last - } - const keyPath = key.replace(/\.js$/, firstFileEXT) - writeFileSync(newContent, path.resolve(output, keyPath), key) + apply(compiler) { + if (fs.existsSync(path.resolve(arkDir, 'build-win'))) { + isWin = true; + } else if (fs.existsSync(path.resolve(arkDir, 'build-mac'))) { + isMac = true; + } else if (!fs.existsSync(path.resolve(arkDir, 'build'))) { + console.error('\u001b[31m', `find build fail`, '\u001b[39m'); + return; } - }) - }) - } + + compiler.hooks.emit.tap('GenAbcPlugin', (compilation) => { + const assets = compilation.assets; + const keys = Object.keys(assets); + keys.forEach(key => { + // choice *.js + if (output && path.extname(key) === '.js') { + let newContent = assets[key].source(); + if (key.search('./workers/') !== 0) { + newContent = forward + newContent + last; + } + const keyPath = key.replace(/\.js$/, firstFileEXT) + writeFileSync(newContent, path.resolve(output, keyPath), key); + } + }) + }) + } } function writeFileSync(inputString, output, jsBundleFile) { - const parent = path.join(output, '..') - if (!(fs.existsSync(parent) && fs.statSync(parent).isDirectory())) { - mkDir(parent) - } - fs.writeFileSync(output, inputString) - if (fs.existsSync(output)) { - js2abcFirst(output) - } else { - console.error('\u001b[31m', `Failed to convert file ${jsBundleFile} to bin. ${output} is lost`, '\u001b[39m') - } + const parent = path.join(output, '..'); + if (!(fs.existsSync(parent) && fs.statSync(parent).isDirectory())) { + mkDir(parent); + } + fs.writeFileSync(output, inputString); + if (fs.existsSync(output)) { + js2abcFirst(output); + } else { + console.error('\u001b[31m', `Failed to convert file ${jsBundleFile} to bin. ${output} is lost`, '\u001b[39m'); + } } function mkDir(path_) { - const parent = path.join(path_, '..') - if (!(fs.existsSync(parent) && !fs.statSync(parent).isFile())) { - mkDir(parent) - } - fs.mkdirSync(path_) + const parent = path.join(path_, '..'); + if (!(fs.existsSync(parent) && !fs.statSync(parent).isFile())) { + mkDir(parent); + } + fs.mkdirSync(path_); } function js2abcFirst(inputPath) { - let param = '-r' - if (isDebug) { - param += ' --debug' - } + let param = '-r'; + if (isDebug) { + param += ' --debug'; + } - let js2abc = path.join(arkDir, 'build', 'src', 'index.js'); - if (isWin) { - js2abc = path.join(arkDir, 'build-win', 'src', 'index.js'); - } else if (isMac){ - js2abc = path.join(arkDir, 'build-mac', 'src', 'index.js'); - } + let js2abc = path.join(arkDir, 'build', 'src', 'index.js'); + if (isWin) { + js2abc = path.join(arkDir, 'build-win', 'src', 'index.js'); + } else if (isMac) { + js2abc = path.join(arkDir, 'build-mac', 'src', 'index.js'); + } - const cmd = `node --expose-gc "${js2abc}" "${inputPath}" ${param}`; - try { - process.execSync(cmd) - console.info(cmd) - } catch (e) { - console.error('\u001b[31m', `Failed to convert file ${inputPath} to abc`, '\u001b[39m') - } - if (fs.existsSync(inputPath)) { - fs.unlinkSync(inputPath) - } else { - console.error('\u001b[31m', `Failed to convert file ${inputPath} to abc. ${inputPath} is lost`, '\u001b[39m') - } - let abcFile = inputPath.replace(/\.js$/, '.abc'); - if (fs.existsSync(abcFile)) { - let abcFileNew = abcFile.replace(/\_.abc$/, '.abc'); - fs.renameSync(abcFile, abcFileNew) - } else { - console.error('\u001b[31m', `${abcFile} is lost`, '\u001b[39m') - } + const cmd = `${nodeJs} --expose-gc "${js2abc}" "${inputPath}" ${param}`; + try { + process.execSync(cmd); + } catch (e) { + console.error('\u001b[31m', `Failed to convert file ${inputPath} to abc`, '\u001b[39m'); + } + if (fs.existsSync(inputPath)) { + fs.unlinkSync(inputPath); + } else { + console.error('\u001b[31m', `Failed to convert file ${inputPath} to abc. ${inputPath} is lost`, '\u001b[39m'); + } + let abcFile = inputPath.replace(/\.js$/, '.abc'); + if (fs.existsSync(abcFile)) { + let abcFileNew = abcFile.replace(/\_.abc$/, '.abc'); + fs.renameSync(abcFile, abcFileNew); + } else { + console.error('\u001b[31m', `${abcFile} is lost`, '\u001b[39m') + } } -module.exports = GenAbcPlugin +module.exports = GenAbcPlugin; diff --git a/ace-loader/webpack.rich.config.js b/ace-loader/webpack.rich.config.js index 0064f87f2452c04fdf8533b759a1dd2e5ca61442..c13b3d41c2af3457e892d7be65cd2db36ae7ed9c 100644 --- a/ace-loader/webpack.rich.config.js +++ b/ace-loader/webpack.rich.config.js @@ -190,6 +190,7 @@ module.exports = (env) => { loader: path.resolve(__dirname, './index.js') }] }) + config.entry = loadEntryObj(process.env.projectPath, process.env.DEVICE_LEVEL, process.env.abilityType, process.env.aceManifestPath) config.output.path = path.resolve(__dirname, process.env.buildPath) @@ -225,7 +226,15 @@ module.exports = (env) => { if (env.isPreview !== "true") { config.plugins.push(new ModuleCollectionPlugin()) if (env.compilerType && env.compilerType === 'ark') { - config.plugins.push(new GenAbcPlugin(process.env.buildPath, path.join(__dirname, 'bin'), + let arkDir = path.join(__dirname, 'bin', 'ark'); + if (env.arkFrontendDir) { + arkDir = env.arkFrontendDir; + } + let nodeJs = 'node'; + if (env.nodeJs) { + nodeJs = env.nodeJs; + } + config.plugins.push(new GenAbcPlugin(process.env.buildPath, arkDir, nodeJs, env.buildMode === 'debug')) } else { if (env.deviceType) {