HarmonyOS鸿蒙Next中无法移植使用了require的js库?

HarmonyOS鸿蒙Next中无法移植使用了require的js库?

具体是 https://github.com/digitalbazaar/forge

js实现,加上index.d.ts解决了 arkts-no-any-unknown ,然后报错 Error message: require is not defined

有任何办法强制这个模块正常使用require吗?或者有什么办法相对简单的移植这种带require的库?

5 回复

仓库居然不允许个人移植npm的库,难怪这里要啥没啥,

更多关于HarmonyOS鸿蒙Next中无法移植使用了require的js库?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


实现了, 使用webpack打包成一个压缩js, 其中就没有require,

再处理掉globalScope中的window, 就可以在鸿蒙使用了,

https://github.com/AoEiuV020/forge

forge功能太多,我没条件具体测试, 只测试了用到的 utf8/base64/hex/md5/aes/rsa 都正常,

没有nodejs的crypto使用,部分算法速度比较慢,能用,

你好,通过OpenHarmony三方库中心仓中查询,目前官方暂未对forge库进行适配,强制使用可能会有兼容性问题,建议使用@ohos.security.cryptoFramework(加解密算法库框架)@ohos.net.http(数据请求)模块替代,基于业务需求选择相应的API实现加密、通信等操作。

在HarmonyOS Next中,使用require的JS库无法直接移植,因为Next版本采用了新的模块系统设计。Next推荐使用ES模块标准的import/export语法替代CommonJS的require。解决方法是将依赖库改为ES模块格式,或使用适配工具(如Rollup、Webpack)转换代码。若必须保留require,需自行实现兼容层或等待官方提供向下兼容方案。当前Next的模块系统不原生支持CommonJS规范。

在HarmonyOS Next中,由于系统采用ArkTS作为主要开发语言,直接使用Node.js风格的require语法确实会遇到兼容性问题。针对这个问题,可以考虑以下解决方案:

  1. 使用ES Module格式导入: 尝试寻找该库的ES Module版本(通常会有单独的ES版本或通过import语法导出的版本),或者使用构建工具(如Webpack/Rollup)将CommonJS模块转换为ES Module。

  2. 修改库的导入方式: 如果库较小,可以手动将其中的require语句改为ArkTS支持的import语法。例如将:

    const module = require('module');
    

    改为:

    import module from 'module';
    
  3. 使用垫片(Polyfill): 在项目入口处添加简单的require实现:

    globalThis.require = function(module) {
      return import(module);
    };
    

    注意这种方法可能无法处理所有情况。

  4. 构建工具转换: 如果项目使用构建工具,可以配置相应的loader/plugin将CommonJS模块转换为ES Module。

  5. 寻找替代库: 考虑寻找功能类似但采用ES Module编写的替代库。

对于forge这样的加密库,也可以考虑使用HarmonyOS提供的原生加密能力(如@ohos.security.cryptoFramework)来替代部分功能。

回到顶部