1# NAPI框架生成工具 问题反馈 2 3## 问题反馈 4 5### 1. pkg cmd_gen.js 生成.exe程序失败 6 7问题描述:在Linux命令行入口安装辅助工具过程中,按文档步骤,在使用pkg命令打包生成.exe文件时,发生报错。 8 9 ~/workspace/assist_tool/assist_tools/napi_tool/code/tool_code/gen$ pkg cmd_gen.js 10 11 > pkg@5.5.2 12 > Targets not specified. Assuming: 13 > node10-linux-x64, node10-macos-x64, node10-win-x64 14 > Fetching base Node.js binaries to PKG_CACHE_PATH 15 > fetched-v10.24.1-linux-x64 [ ] 0%> Not found in remote cache: 16 > {"tag":"v3.2","name":"node-v10.24.1-linux-x64"} 17 > Building base binary from source: 18 > built-v10.24.1-linux-x64 19 > Fetching Node.js source archive from nodejs.org... 20 > Error! AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value: 21 22问题定位:这是由于在使用pkg命令打包生成.exe文件时,需要连接github来生成对应的可执行程序,由于国内的网络的问题,连接github的时候有时候时连接不上的。 23 24问题解决:如果失败继续执行这个命令,多执行几次就会成功。 25 26 27 28### 2. 用可执行程序生成c++代码失败 29 30问题描述:在windows下用cmd_gen-win.exe生成对应的c++代码报错。 31 32 D:\napi_tool>cmd_gen-win.exe @ohos.power.d.ts pkg/prelude/bootstrap.js:1794 return wrapper.apply(this.exports, args); ^ TypeError: Cannot read property 'name' of undefined at GenerateAll (C:\snapshot\gen\generate.js) at Object.DoGenerate (C:\snapshot\gen\main.js) at Object.<anonymous> (C:\snapshot\gen\cmd_gen.js) at Module._compile (pkg/prelude/bootstrap.js:1794:22) [90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)[39m [90m at Module.load (internal/modules/cjs/loader.js:950:32)[39m [90m at Function.Module._load (internal/modules/cjs/loader.js:790:12)[39m at Function.runMain (pkg/prelude/bootstrap.js:1847:12) [90m at internal/main/run_main_module.js:17:47[39m 33 34问题定位:在windows命令行中执行cmd_gen-win.exe的时候后面没有加d.ts文件所在的绝对路径,导致d.ts文件没有找到。 35 36问题解决:在执行cmd_gen-win.exe的时候后面要加.d.ts文件所在的绝对路径,或者把d.ts文件放入到cmd_gen-win.exe所在的目录中。例如直接执行: 37 38 cmd_gen-win.exe @ohos.power.d.ts 39 40### 3.未安装系统依赖插件,运行测试用例失败 41 42问题描述:首次运行UT或ST用例失败。 43 44 Error: Cannot find module '../../node_modules/typescript' 45 Require stack: 46 - /home/harmony/hhhh/napi_generator_1/src/gen/tools/common.js 47 - /home/harmony/hhhh/napi_generator_1/src/gen/analyze.js 48 - /home/harmony/hhhh/napi_generator_1/test/unittest/analyze.test.js 49 at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15) 50 at Function.Module._load (internal/modules/cjs/loader.js:746:27) 51 at Module.require (internal/modules/cjs/loader.js:974:19) 52 at require (internal/modules/cjs/helpers.js:101:18) 53 at Object.<anonymous> (/home/harmony/hhhh/napi_generator_1/src/gen/tools/common.js:16:13) 54 55问题定位:首次运行测试用例,napi_generator目录下、napi_generator/src目录下依赖插件未全部安装。 56 57问题解决:napi_generator目录下、napi_generator/src目录下重新安装依赖即可,直到napi_generator/src/package.json文件中包含以下所有插件: 58 59 "devDependencies": { 60 "@types/glob": "^7.1.4", 61 "@types/mocha": "^9.0.0", 62 "@types/node": "14.x", 63 "@types/vscode": "^1.62.0", 64 "@vscode/test-electron": "^1.6.2", 65 "eslint": "^8.1.0", 66 "glob": "^7.1.7", 67 "mocha": "^9.1.3", 68 "webpack": "^5.64.4", 69 "webpack-cli": "^4.9.1" 70 } 71 72### 4.未安装rewire插件,运行测试用例失败 73 74问题描述:readme中插件全部安装完成后,执行测试用例失败。 75 76 Error: Cannot find module 'rewire' 77 Require stack: 78 - /home/harmony/myNapi/napi_generator_1/test/unittest/extend.test.js 79 at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15) 80 at Function.Module._load (internal/modules/cjs/loader.js:746:27) 81 at Module.require (internal/modules/cjs/loader.js:974:19) 82 83问题定位:由于ut用例代码中引入rewire,执行用例时未安装该插件,导致执行用例失败。 84 85问题解决:执行命令: 86 87 npm i rewire 88 89 安装插件之后,再次运行用例即可。 90 91### 5.后缀为gyp文件中包含/*注释,执行用例失败 92 93问题描述:代码中后缀为gyp的文件中包含/*注释,执行用例失败。 94 95 File "/home/harmony/myNapi/napi_generator/node_moduless/node-gyp/gyp/pylib/gyp/input.py",line 237,in LoadOneBuildFile 96 build_file_data = eval(build_file_contents,{"__builtins__":{}},None) 97 File "bingding.gyp",Line 1 98 /* 99 ^ 100 101问题定位:代码中后缀为gyp的文件中包含/*,但工具不能解析,只能解析#后面的注释,导致执行用例失败。 102 103问题解决:修改代码。 104 105### 6.VS Code 1.76.0以上版本下载napi-gen VS Code插件报错 106 107问题描述:VS Code 1.76.0以上版本下载VS Code插件’napi-gen‘时报错,如下所示: 108 109![](./figures/napi_vs_plugin_download_err.png) 110 111问题解决: 112 113(1)关闭vscode 114 115(2)按WIN + R,输入cmd,打开终端,然后输入命令 116 117code --no-sandbox 118 119(3)再重启vscode,就可以正常使用了。 120 121## 已知Bug 122 123### 1.Map<string,string>类型的函数转换框架代码失败 124 125问题描述:当待转换的ts文件中包含map数据类型,且书写方式为Map<string,string>时,框架代码转换失败。 126 127 2022-6-28 9:16:42 [ERR] @ohos.napitest.d.ts (17,20): Cannot find name 'Map'. Do you need to change your target library? Try changing the 'lib' compiler option to 'es2015' or later. 128 2022-6-28 9:16:42 [INF] fail@ohos.napitest.d.ts (17,20): Cannot find name 'Map'. Do you need to change your target library? Try changing the 'lib' compiler option to 'es2015' or later. 129 130问题定位:当前代码不支持Map<string,string>此种书写方式。 131 132问题解决:当ts文件中包含Map<string,string>书写方式的方法时,通过可执行文件方式进行框架代码转换之前安装@types/node依赖,即可转换成功,命令如下: 133 134 npm install @types/node -D 135 136通过Intellij IDEA插件或VS Code插件转换时,不支持ts文件包含Map<string,string>书写方式的方法,敬请期待后续更新解决方案。 137 138### 2.枚举值中包含左移右移等符号的函数框架代码转换失败 139 140问题描述:当待转换的ts文件中包含enum数据类型,且enum中包含左移右移时,框架代码转换失败,函数如下: 141 142 enum HiTraceFlag { 143 DEFAULT = 0, 144 DONOT_CREATE_SPAN = 1 << 1, 145 TP_INFO = 1 << 2, 146 } 147 function begin(name: string, flags: HiTraceFlag): HiTraceFlag; 148 149问题定位:当前代码不支持Map<string,string>此种书写方式。 150 151### 3.array<Map<string,any>>与array<{[key:string]:any}>数据类型框架代码转换失败 152 153问题描述:当待转换的ts文件中包含array<map>数据类型时,框架代码转换失败,函数如下: 154 155 function fun1(v: Array<{ [key: string]: string }>): void; 156 function fun2(v: Array<Map<string, string>>): string; 157 158问题定位:当前代码不支持Map<string,string>此种书写方式。