javascript - Javascript 中缺少模块,但 Typescript 中没有

标签 javascript typescript npm visual-studio-code vscode-extensions

我正在按照指南编写一个 vscode 扩展,我在我的 server.ts 文件中遇到了一个导入问题。这是文件树:

📦test
 ┣ 📂client
 ┃ ┣ 📂out
 ┃ ┣ 📂src
 ┃ ┃ ┗ 📜index.ts
 ┃ ┣ 📜package-lock.json
 ┃ ┣ 📜package.json
 ┃ ┗ 📜tsconfig.json
 ┣ 📂server
 ┃ ┣ 📂out
 ┃ ┣ 📂src
 ┃ ┃ ┣ 📜completions.ts
 ┃ ┃ ┣ 📜parser.ts
 ┃ ┃ ┗ 📜server.ts
 ┃ ┣ 📜package-lock.json
 ┃ ┣ 📜package.json
 ┃ ┣ 📜tsconfig.json
 ┃ ┗ 📜yarn.lock
 ┣ 📜package.json
 ┗ 📜tsconfig.json

与扩展样本结构相同provided by Microsoft .

但是,在 server.ts 中,我试图从 vscode 模块导入一些元素:

//server.ts

import { workspace as Workspace } from 'vscode';

let sm_home: string = Workspace.getConfiguration("sourcepawnLanguageServer").get("sourcemod_home");
...

在我的 package.json 中,我有:

  "dependencies": {
    "@types/glob": "^5.0.30",
    "@types/uuid": "^3.4.0",
    "@types/vscode": "^1.14.0",
    "glob": "^7.1.2",
    "uuid": "^3.1.0",
    "vscode-languageserver": "^7.0.0",
    "vscode-languageserver-textdocument": "^1.0.1",
    "vscode-test": "1.5.1",
    "vscode-uri": "^3.0.2"
  },

整个项目编译正常,但是当我启动扩展时,出现以下错误:

Error: Cannot find module 'vscode'
Require stack:
- c:\Users\Charles\CloudStation\Documents\Perso\Dev\sourcepawn-vscode\server\out\server.js
    at Function._resolveFilename (internal/modules/cjs/loader.js:1019:15)
    at internal/modules/cjs/loader.js:895:27
    at Function._load (electron/js2c/asar_bundle.js:5:12738)
    at Module.require (internal/modules/cjs/loader.js:1079:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (c:\Users\Charles\CloudStation\Documents\Perso\Dev\sourcepawn-vscode\server\out\server.js:5:18)
    at Module._compile (internal/modules/cjs/loader.js:1199:30)
    at Object..js (internal/modules/cjs/loader.js:1220:10)
    at Module.load (internal/modules/cjs/loader.js:1039:32)
    at internal/modules/cjs/loader.js:932:14 {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'c:\\Users\\Charles\\CloudStation\\Documents\\Perso\\Dev\\sourcepawn-vscode\\server\\out\\server.js'
  ]
}

如果我在 server.ts 文件中删除导入和使用导入的行,错误就会消失。 此导入在 index.ts` 中运行良好 这可能是因为 server.ts 是在 index.ts` 中调用的吗?

import { ExtensionContext, workspace as Workspace, window, commands } from 'vscode';
import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from 'vscode-languageclient/node';
import * as glob from 'glob';
import * as path from 'path';

export const sm_home: string = 'Workspace.getConfiguration("sourcepawnLanguageServer").get("sourcemod_home")';

export function activate(context: ExtensionContext) {
    let serverModule = context.asAbsolutePath(
        path.join('server', 'out', 'server.js')
...

这似乎并不困扰the C/C++ extension.

在此先感谢您的帮助!

最佳答案

vscode包已被弃用。它现在已分为两个包,即 @types/vscodevscode-test .可以找到这次重构的原因here .

您已经包含了 @types/vscode 依赖项,但没有包含 vscode-test

添加 vscode-test 依赖项应该可以解决您的问题,即

npm i vscode-test

还要确保您拥有:

"engines": { "vscode": "^1.32.0" }

在您的 package.json 文件中定义。

关于javascript - Javascript 中缺少模块,但 Typescript 中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66403948/

相关文章:

javascript - 如果有匹配元素,如何比较 2 个单独的对象/数组是否有一个相同的元素并将 2 个对象连接到一个数组中? Javascript

javascript - jsPDF:使用自定义字体对齐文本

javascript - 通过 Post 向 PHP 提交值后停止页面重新加载

javascript - Typescript 检查 "any n consecutive elements are same"是否在 M 大小的数组中

node.js - curl http ://npmjs. org/install.sh | sh 在 cygwin 上失败

javascript - 覆盖 package.json 脚本 - NPM

javascript - Backbone JS : Can you change templates of a view on the fly?

javascript - 从 json 数据应用 ionic 选择过滤器选择

css - 如何使用 bootstrap 4 获得折叠菜单后面的徽章?

javascript - nodemailer nodejs : sendmail exited with 127