我正在开发VS代码的扩展,并且还针对该扩展使用的对象编写了一些测试。这些测试在VS Code中成功运行。但是,我也希望它们作为我的CI构建的一部分运行,我通过gulp来做。我有一个gulp任务,使用“gulp mocha”来运行测试。那些测试将通过gulp成功运行,直到我引入一个类,在它的模块引用的传递闭包中的任何地方,拉入'vscode'。
我的gulp输出如下:
[13:29:03] Starting 'test'...
[13:29:03] { [Error: Cannot find module 'vscode']
code: 'MODULE_NOT_FOUND',
name: 'Error',
message: 'Cannot find module \'vscode\'',
stack: 'Error: Cannot find module \'vscode\'\n at
Function.Module._resolveFilename (module.js:325:15)\n at
Function.Module._load (module.js:276:25)\n at Module.require
(module.js:353:17)\n at require (internal/module.js:12:17)\n at
Object.<anonymous> (C:\\vsts-vscode\\out\\src\\helpers\\settings.js:6:18)\n
at Module._compile (module.js:397:26)\n at
Object.Module._extensions..js
(module.js:404:10)\n at Module.load (module.js:343:32)\n at
Function.Module._load (module.js:300:12)\n at Module.require (module.js:353:17)',
showStack: true,
showProperties: true,
plugin: 'gulp-mocha' }
[13:29:03] 'test' errored after 212 ms
[13:29:03] Error in plugin 'gulp-mocha'
Message:
Cannot find module 'vscode'
Details:
code: MODULE_NOT_FOUND
Stack:
Error: Cannot find module 'vscode'
at Function.Module._resolveFilename (module.js:325:15)
at Function.Module._load (module.js:276:25)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (**C:\vsts-vscode\out\src\helpers\settings.js:6:18**)
at Module._compile (module.js:397:26)
at Object.Module._extensions..js (module.js:404:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)
在调用堆栈中,有一个对 src \ helpers \ settings.js:6:18 的引用。在那个位置是这个声明:
const vscode_1 = require("vscode");
在我的打字稿来源中,即:
import { workspace } from "vscode";
如果我只是删除引入我在settings.js中使用的命名空间的import语句,那么测试将恢复成功运行。
在完成有关node.js模块解析(https://nodejs.org/api/modules.html#modules_all_together)的文档后,我可以理解为什么会得到MODULE_NOT_FOUND。由于“vscode”不是核心模块而不是相对引用(“。”,“/”,“../”),因此节点将查找package.json文件。假设它找到它(procmon告诉我它确实),它寻找一个“主”字段。我猜,在这一点上,它找不到“主”字段并且无法解决问题。
据推测,当在VS Code中运行测试(工作正常)时,分辨率还包括定位文件(http://www.typescriptlang.org/docs/handbook/module-resolution.html)并因此成功。
我无法弄清楚当我通过gulp运行测试时,我可以做些什么来解决对“vscode”的引用。
有什么想法吗?