我遇到了一个奇怪的问题,即尝试通过angular-cli运行测试时,webpack似乎无法编译我的应用程序。特别是,它似乎不像我要导入到我的TS源文件之一的节点模块。
我正在使用自己的节点模块(尚未发布到npm),该模块具有如下定义的入口文件:
index.js
const MyModule = require('./src/index.js');
const myModule = new MyModule();
module.exports = {
doStuff: myModule.doStuff,
doOtherStuff: myModule.doOtherStuff
}
在我的TS源文件(Angular应用程序)中,我包括以下模块:
import MyModule = require('@acme/mymodule');
这对于我在运行应用程序时正常工作,并且能够按预期在代码中调用模块上公开的函数。
运行测试时,出现以下错误:
16 01 2019 13:22:11.662:DEBUG [middleware:source-files]: Fetching /_karma_webpack_/main.bundle.js
16 01 2019 13:22:12.067:DEBUG [phantomjs.launcher]: TypeError: undefined is not an object (evaluating 'modules[moduleId].call')
16 01 2019 13:22:12.067:DEBUG [phantomjs.launcher]: http://localhost:9876/_karma_webpack_/inline.bundle.js:55 in __webpack_require__
http://localhost:9876/_karma_webpack_/main.bundle.js:10045 in ../../../../../src/test.ts
http://localhost:9876/_karma_webpack_/inline.bundle.js:55 in __webpack_require__
http://localhost:9876/_karma_webpack_/inline.bundle.js:26 in webpackJsonpCallback
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
SyntaxError: Expected an identifier but found 'MyModule' instead
at http://localhost:9876/_karma_webpack_/scripts.bundle.js:327
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
SyntaxError: Expected an identifier but found 'MyModule' instead
at http://localhost:9876/_karma_webpack_/scripts.bundle.js:327
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
SyntaxError: Expected an identifier but found 'MyModule' instead
at http://localhost:9876/_karma_webpack_/scripts.bundle.js:327
16 01 2019 13:22:12.070:DEBUG [karma]: Run complete, exiting.
16 01 2019 13:22:12.071:DEBUG [launcher]: Disconnecting all browsers
我想知道这是否与我对const
的使用有关,因此我更改为var
,这实际上使我越过了错误。
我宁愿能够在我目前正在执行的整个节点模块源中使用const
和let
,在测试过程中还需要配置karma \ webpack进行编译吗?运行以允许包含我的模式模块?还是与PhantomJS解释我在TS文件中对require()
的用法有关?
更新
因此,我尝试使用无头chrome进行测试,但从Webpack中返回了require is not defined
错误。所以我猜我需要在我的节点模块源文件上运行预处理器?