1、如何解决三方包require语句报错
报错原因
部分三方包由npm迁移而来,其开发环境为node, 其中的require语法arkcompiler不完全支持,出现运行报错情况。
场景1:
// Module/src/test.json
{a: 1, b: 2}
//use.js
let test = require("Module/src/test.json")
需修改为:
// Module/src/test.js
module.exports = {a: 1, b: 2}
//use.js
let test = require("Module/src/test")
场景2:
// Module/package.json
...
main: "./src"
...
// use.js
let module = require("Module")
需修改为:
// Module/package.json
...
main: "./src/index.js"
...
// use.js
let module = require("Module")
场景3:
编译出现warning信息:
Plugin node-resolve: preferring built-in module 'util' over local alternative at '/Users/~/Documents/fe-module/demo/node_modules/util/util.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning
解决方案
修改rollup 配置文件,rollup.config.js中修改 preferBuiltins 字段:
plugins: [
resolve({
preferBuiltins: false, // true 或 false
mainFields: ['module', 'main'],
extensions
})
];
场景4:
import {Buffer} from 'buffer'
需修改为:
import {Buffer} from 'buffer/'
2、如何解决编译报错“Indexed access is not supported for fields(arkts-no-props-by-index)”的问题
解决方案
修改代码:
getValue(breakpoint: string): T {
return Reflect.get(this.options, breakpoint) as T;
}
3、如何解决编译报错“Declaration merging is not supported(arkts-no-decl-merging)” 或 “Cannot redeclare block-scoped variable ‘xxx’”的问题
解决方案
如果文件中不包含export关键字,该文件将视作全局命名空间的一部分,相当于两个文件实质为同一个文件。请添加export关键字使其成为独立命名空间,或者将声明的内容添加到自定义的命名空间中。
4、如何解决编译报错“ The inferred type of ‘xxx’ cannot be named without a reference to ‘xxx’. This is likelynot portable. A type annotation is necessary.”的问题
问题原因
HSP会生成.d.ts声明文件,由于原始文件中未注明类型,导致生成的.d.ts文件缺少类型注解。
解决方案
报错位置添加类型注解