javascript - 如果我在 package.json 中设置“类型:模块”,Cordova 构建会失败。我该如何解决这个问题,但仍然进行单元测试?
问题描述
我使用Cordova 框架为 Android 构建了一个简单的应用程序。我现在已经实现了一个简单的单元测试(使用Tape),它在 Node.js 中运行。由于我正在测试的文件使用 ES6 模块,为了在 Node 中运行测试,我必须添加"type": "module",
到我的package.json
文件中。但是当我这样做时,我的应用程序将不再构建——Cordova 构建命令失败,输出如下。解决此问题的正确方法是什么?
- 是否可以以编程方式设置
"type": "module",
?如果是这样,我也许只能在单元测试运行时设置它。 - 还是在这种情况下我的方法的某些部分存在缺陷?这当然是一种可能性。也许如果我在浏览器中测试(而不是在 Node 中),这个问题会避免吗?
谢谢。
构建输出
$ cordova build android
Unable to load PlatformApi from platform. Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: C:\Users\snarl\my-project\platforms\android\cordova\Api.js
require() of ES modules is not supported.
require() of C:\Users\snarl\my-project\platforms\android\cordova\Api.js from C:\Users\snarl\AppData\Roaming\npm\node_modules\cordova\node_modules\cordova-lib\src\cordova\util.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename Api.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from C:\Users\snarl\my-project\package.json.
Unhandled error. ('The platform "android" does not appear to be a valid cordova platform. It is missing API.js. android not supported.')
解决方案
万一其他人陷入困境,这是我使用的解决方案(我猜更多的是一种解决方法)。我将单元测试所需的所有文件捆绑到一个 JS 文件bundle-test.js
中——使用 Browserify(带有 Babelify 转换)。然后我从 Node 命令行 运行该node test-bundle.js
文件: . 我的单元测试运行没有问题,我不必设置"type": "module"
.package.json
推荐阅读
- javascript - 如何获取对象数组中键的值?
- amazon-web-services - 无法在 ec2 实例 aws 上访问我的站点
- pytorch - 在 PyTorch 中加载图像
- sql - PostgreSQL 重复键值违反唯一约束,同时在冲突中使用时不执行任何插入操作
- c# - 使用 LinearGradientBrush 的 ColorAnimation
- mysql - 根据 relId 返回姓名和他/她的朋友的查询
- multiprocessing - 有没有办法在 python 中为多 gpu 环境的程序进行令人尴尬的并行运行?
- html - 在 Outlook 中丢失 HTML 格式(Spring Mail + FreeMarker)
- javascript - jquery if (value) ... else 避免“重复选择器”
- firebase - 如何绕过 FireStore 查询