首页 > 解决方案 > 如果我在 package.json 中设置“类型:模块”,Cordova 构建会失败。我该如何解决这个问题,但仍然进行单元测试?

问题描述

我使用Cordova 框架为 Android 构建了一个简单的应用程序。我现在已经实现了一个简单的单元测试(使用Tape),它在 Node.js 中运行。由于我正在测试的文件使用 ES6 模块,为了在 Node 中运行测试,我必须添加"type": "module",到我的package.json文件中。但是当我这样做时,我的应用程序将不再构建——Cordova 构建命令失败,输出如下。解决此问题的正确方法是什么?

谢谢。


构建输出

$ 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.')

标签: javascriptnode.jsunit-testingcordovaes6-modules

解决方案


万一其他人陷入困境,这是我使用的解决方案(我猜更多的是一种解决方法)。我将单元测试所需的所有文件捆绑到一个 JS 文件bundle-test.js中——使用 Browserify(带有 Babelify 转换)。然后我从 Node 命令行 运行node test-bundle.js文件: . 我的单元测试运行没有问题,我不必设置"type": "module".package.json


推荐阅读