0

我正在为 VS Code 开发一个扩展,并针对该扩展使用的对象编写一些测试。这些测试在 VS Code 中成功运行。但是,我也希望它们作为我的 CI 构建的一部分运行,我通过 gulp 来实现。我有一个使用“gulp mocha”来运行测试的 gulp 任务。这些测试将通过 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”的引用。

有什么想法吗?

4

0 回答 0