diff --git a/zh-cn/application-dev/arkts-utils/arkts-dynamic-import.md b/zh-cn/application-dev/arkts-utils/arkts-dynamic-import.md index 37e16e6afc59e217563df36ab9eb769ba500b5a1..eb9a5544968673cbb95959d6a09deee957d85bb0 100644 --- a/zh-cn/application-dev/arkts-utils/arkts-dynamic-import.md +++ b/zh-cn/application-dev/arkts-utils/arkts-dynamic-import.md @@ -35,11 +35,13 @@ export function addHarLibrary(a:number, b:number):number { return c; } ``` + ```typescript // harlibrary's Index.ets export { Calc, addHarLibrary } from './src/main/ets/utils/Calc' ``` + ```json5 // HAP's oh-package.json5 @@ -67,6 +69,7 @@ import('harlibrary').then((ns:ESObject) => { ns[functionName](16, 17); // 调用全局方法addHarLibrary() }); ``` + ## 动态import实现方案介绍 动态import根据入参是常量还是变量,分成动态import常量表达式和动态import变量表达式两大特性规格。 @@ -110,6 +113,7 @@ import('harlibrary').then((ns:ESObject) => { return c; } ``` + ```typescript // HAP's src/main/ets/pages/Index.ets @@ -123,6 +127,7 @@ import('harlibrary').then((ns:ESObject) => { console.info(ns.add(3, 5)); } ``` + ```json5 // HAP's oh-package.json5 @@ -148,6 +153,7 @@ import('harlibrary').then((ns:ESObject) => { console.info(ns.add(3, 5)); }); ``` + ```json5 // HAP's oh-package.json5 @@ -166,6 +172,7 @@ import('harlibrary').then((ns:ESObject) => { return c; } ``` + ```typescript // HAP's src/main/ets/pages/Index.ets @@ -173,6 +180,7 @@ import('harlibrary').then((ns:ESObject) => { console.info(ns.add(3, 5)); }); ``` + ```json5 // HAP's oh-package.json5 @@ -198,6 +206,7 @@ import('harlibrary').then((ns:ESObject) => { console.info(ns.add(3, 5)); }); ``` + ```json5 // HAP's oh-package.json5 @@ -214,6 +223,7 @@ import('harlibrary').then((ns:ESObject) => { console.info('DynamicImport @ohos/crypto-js: ' + ns.CryptoJS.MD5(123456)); }); ``` + ```json5 // HAP's oh-package.json5 @@ -230,6 +240,7 @@ import('harlibrary').then((ns:ESObject) => { console.info('DynamicImport json5'); }); ``` + ```json5 // HAP's oh-package.json5 @@ -248,6 +259,7 @@ import('harlibrary').then((ns:ESObject) => { return c; } ``` + ```typescript // HAP's src/main/ets/pages/Index.ets @@ -255,6 +267,7 @@ import('harlibrary').then((ns:ESObject) => { console.info(ns.add(3, 5)); }); ``` + - **HAP常量动态import自己的Native库** @@ -262,6 +275,7 @@ import('harlibrary').then((ns:ESObject) => { // libnativeapi.so's index.d.ts export const add: (a:number, b:number) => number; ``` + ```typescript // HAP's src/main/ets/pages/Index.ets @@ -269,6 +283,7 @@ import('harlibrary').then((ns:ESObject) => { console.info('DynamicImport libnativeapi.so: ' + ns.default.add(2, 3)); }); ``` + ```json5 // HAP's oh-package.json5 @@ -276,6 +291,7 @@ import('harlibrary').then((ns:ESObject) => { "libnativeapi.so": "file:./src/main/cpp/types/libnativeapi" } ``` + - **HAP常量动态import加载API** @@ -287,6 +303,7 @@ import('harlibrary').then((ns:ESObject) => { import('@ohos.matrix4').then((ns:ESObject) => { ns.default.identity(); }); import('@ohos.hilog').then((ns:ESObject) => { ns.default.info(0x0000, 'testTag', '%{public}s', 'DynamicImport @ohos.hilog.'); }); ``` + ### 动态import变量表达式 @@ -310,6 +327,7 @@ import(filePath).then((obj: ESObject) => { console.info('DynamicImport I am a file'); } ``` + 对应的runtimeOnly配置: @@ -346,6 +364,7 @@ import(filePath).then((obj: ESObject) => { console.info(ns.add(3, 5)); }); ``` + ```json5 // HAP's oh-package.json5 "dependencies": { @@ -382,6 +401,7 @@ import(filePath).then((obj: ESObject) => { console.info(ns.add(3, 5)); }); ``` + ```json5 // HAP's oh-package.json5 "dependencies": { @@ -410,6 +430,7 @@ import(filePath).then((obj: ESObject) => { console.info('DynamicImport @ohos/crypto-js: ' + ns.CryptoJS.MD5(123456)); }); ``` + ```json5 // HAP's oh-package.json5 "dependencies": { @@ -438,6 +459,7 @@ import(filePath).then((obj: ESObject) => { console.info('DynamicImport json5'); }); ``` + ```json5 // HAP's oh-package.json5 "dependencies": { @@ -474,6 +496,7 @@ import(filePath).then((obj: ESObject) => { console.info(ns.add(3, 5)); }); ``` + ```json5 // HAP's build-profile.json5 "buildOption": { @@ -500,6 +523,7 @@ import(filePath).then((obj: ESObject) => { console.info('DynamicImport libnativeapi.so: ' + ns.default.add(2, 3)); }); ``` + ```json5 // HAP's oh-package.json5 "dependencies": { @@ -518,6 +542,7 @@ import(filePath).then((obj: ESObject) => { } } ``` + - **HAP变量动态import加载API** @@ -534,6 +559,8 @@ import(filePath).then((obj: ESObject) => { packageName = '@ohos.hilog'; import(packageName).then((ns:ESObject) => { ns.default.info(0x0000, 'testTag', '%{public}s', 'DynamicImport @ohos.hilog.'); }); ``` + + 变量动态import加载API时无需配置runtimeOnly。 ### HAR模块间动态import依赖解耦 @@ -584,6 +611,8 @@ import(harName).then((ns:ESObject) => { console.info('DynamicImport addHar1 4 + 5 = ' + ns.addHar1(4, 5)); }); ``` + + ```json5 // har1's oh-package.json5 "dependencies": { @@ -606,6 +635,8 @@ import(harName).then((ns:ESObject) => { // har1's Index.ets export { addHar1 } from './src/main/ets/utils/Calc' ``` + + ```typescript // har1's src/main/ets/utils/Calc.ets export function addHar1(a:number, b:number):number { @@ -619,10 +650,14 @@ export function addHar1(a:number, b:number):number { return c; } ``` + + ```typescript // har2's Index.ets export { addHar2 } from './src/main/ets/utils/Calc' ``` + + ```typescript // har2's src/main/ets/utils/Calc.ets export function addHar2(a:number, b:number):number { @@ -631,6 +666,7 @@ export function addHar2(a:number, b:number):number { return c; } ``` + har1对har2的依赖dependencies和runtimeOnly配置转移到HAP中,har1不需要配置对har2的dependencies和runtimeOnly配置: diff --git a/zh-cn/application-dev/arkts-utils/arkts-module-side-effects.md b/zh-cn/application-dev/arkts-utils/arkts-module-side-effects.md index 1cd8952bbee1233576754a28f99953f729c1fc90..c862a0e0a7914fe5e69b826fb6281b185580df1b 100644 --- a/zh-cn/application-dev/arkts-utils/arkts-module-side-effects.md +++ b/zh-cn/application-dev/arkts-utils/arkts-module-side-effects.md @@ -31,11 +31,15 @@ Module loaded! ```typescript // module.ets export const data = 1; +``` + +```typescript // main.ets import { data } from './module' console.log(data); ``` + 输出内容: ```typescript 1 @@ -105,12 +109,20 @@ export let data1 = "data from module" export function changeGlobalVar() { globalThis.someGlobalVar = 100; } +``` + + +```typescript // sideEffectModule.ets export let data2 = "data from side effect module" export function changeGlobalVar() { globalThis.someGlobalVar = 200; } +``` + + +```typescript // moduleUseGlobalVar.ets import { data1, changeGlobalVar } from './module' @@ -119,6 +131,10 @@ export function useGlobalVar() { changeGlobalVar(); // 在需要的时候执行代码,而不是模块加载时执行。 console.log(globalThis.someGlobalVar); } +``` + + +```typescript // main.ets(执行入口) import { data1 } from "./module" @@ -131,6 +147,7 @@ function maybeNotCalledAtAll() { console.log(data2); } ``` + 输出内容: ``` data from module @@ -144,6 +161,10 @@ data from module // module.ets export let data = "data from module" AppStorage.setOrCreate("SomeAppStorageVar", 200); // 修改应用全局的UI状态 +``` + + +```typescript // Index.ets import { data } from "./module" // 将AppStorage中的SomeAppStorageVar改为200 @@ -168,6 +189,7 @@ function maybeNotCalledAtAll() { console.log(data); } ``` + 显示内容: ``` test200 @@ -224,7 +246,9 @@ export let data = "data from modifyPrototype" Array.prototype.includes = function (value) { return this.indexOf(value) !== -1; }; - +``` + +```typescript // main.ets import { data } from "./modifyPrototype" // 此时修改了Array的原型链 let arr = [1, 2, 3, 4]; @@ -233,6 +257,7 @@ function maybeNotCalledAtAll() { console.log(data); } ``` + **产生的副作用** 修改内置的全局对象或原型链,影响其他代码运行。 @@ -250,12 +275,16 @@ ArkTS模块化支持循环依赖,即模块A依赖模块B,同时模块B又依 import { b } from "./b" console.log('Module A: ', b); export const a = 'A'; +``` + +```typescript // b.ets import { a } from "./a" console.log('Module B: ', a); export const b = 'B'; ``` + 输出内容: ``` Error message: a is not initialized @@ -277,12 +306,16 @@ Stacktrace: // module.ets export let data = "data from module" globalThis.someGlobalVar = 100; +``` + +```typescript // moduleUseGlobalVar.ets import lazy { data } from "./module" console.log(globalThis.someGlobalVar); // 此时由于lazy特性,module模块还未执行,someGlobalVar的值为undefined console.log(data); // 使用到module模块的变量,此时module模块执行,someGlobalVar的值变为100 ``` + 输出内容: ``` undefined diff --git a/zh-cn/application-dev/arkts-utils/js-apis-load-native-module.md b/zh-cn/application-dev/arkts-utils/js-apis-load-native-module.md index 7e4805bff2a85a19853ccc2d1b8d0490360d45e4..4da7e507ebbf6e5b06335aa0871c87eaa6ec1535 100644 --- a/zh-cn/application-dev/arkts-utils/js-apis-load-native-module.md +++ b/zh-cn/application-dev/arkts-utils/js-apis-load-native-module.md @@ -34,6 +34,7 @@ loadNativeModule(moduleName: string): Object; let hilog: ESObject = loadNativeModule("@ohos.hilog"); hilog.info(0, "testTag", "loadNativeModule ohos.hilog success"); ``` + - **HAP加载Native库** @@ -43,6 +44,8 @@ libentry.so的index.d.ts文件如下: //index.d.ts export const add: (a: number, b: number) => number; ``` + + 1.在加载本地so库时,需在oh-package.json5文件中配置dependencies项。 @@ -53,6 +56,7 @@ export const add: (a: number, b: number) => number; } } ``` + 2.在build-profile.json5中进行配置。 @@ -69,6 +73,7 @@ export const add: (a: number, b: number) => number; } } ``` + 3.使用loadNativeModule加载libentry.so,并调用函数add。 @@ -76,3 +81,4 @@ export const add: (a: number, b: number) => number; let module: ESObject = loadNativeModule("libentry.so"); let sum: number = module.add(1, 2); ``` +