扩展安装后无法找到模块

5

我想创建一个 VS Code 扩展,开发时它可以正常工作。但是当我打包并安装到 VS Code 中时,出现了以下错误:

  ERR Cannot find module 'request': Error: Cannot find module 'request'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:602:15)
    at Function.Module._load (internal/modules/cjs/loader.js:528:25)
    at Function.t._load (c:\Users\USER\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\services\extensions\node\extensionHostProcess.js:729:537)
    at Function.t.getExtensionPathIndex.then.a._load (c:\Users\USER\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\services\extensions\node\extensionHostProcess.js:691:639)
    at Function.t.getExtensionPathIndex.then.r._load (c:\Users\USER\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\services\extensions\node\extensionHostProcess.js:655:197)
    at Module.require (internal/modules/cjs/loader.js:658:17)
    at n (c:\Users\USER\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\loader.js:15:874)
    at openBambooPlanUrlInBrowser.GIT.getGitBranchFromFileName (C:\Users\USER\.vscode\extensions\dUSER.markdown-table-of-contents-0.0.1\out\extension.js:397:41)
    at getGitBranchFromFileName.exec (C:\Users\USER\.vscode\extensions\dUSER.markdown-table-of-contents-0.0.1\out\extension.js:383:17)
    at ChildProcess.exithandler (child_process.js:294:7)
    at ChildProcess.emit (events.js:182:13)
    at maybeClose (internal/child_process.js:961:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:5)

我的代码:

async openBambooPlanUrlInBrowser(fileName: string) {
    new GIT().getGitBranchFromFileName(fileName, (branch: string) => {
        var config: any = vscode.workspace.getConfiguration('markdown-table-of-contents').get('bitbucketRepositories');
        for (var setting of config) {

            if (fileName.toLowerCase().startsWith(setting.folder.toLowerCase())) {
                branch = branch.replace('/', '-');
                let bambooHost = vscode.workspace.getConfiguration('markdown-table-of-contents').get('atlassianBambooHost');
                const request = require('request');

                request(
                    {
                        url: `${bambooHost}/rest/api/latest/plan/${setting.bambooPlanKey}/branch/${branch}.json`,
                        headers: {
                            "Authorization": 'Basic ' + vscode.workspace.getConfiguration('markdown-table-of-contents').get('atlassianAuthHash')
                        }
                    },
                    (error: string, response: string, body: string) => {
                        let planKey = JSON.parse(body).key;
                        vscode.env.openExternal(vscode.Uri.parse(`${bambooHost}/browse/${planKey}`));
                    }
                );

            }
        }
    });

}

package.json中获取依赖关系

"dependencies": {
    "child_process": "^1.0.2",
    "clipboardy": "^1.2.3",
    "fs": "0.0.1-security",
    "iconv-lite": "^0.4.24",
    "path": "^0.12.7",
    "request": "^2.88.0",
    "util": "^0.11.1",
    "xml2js": "^0.4.19",
    "xmldom": "^0.1.27"
}

根目录:

.gitignore
.vscode
.vscodeignore
depl.bat
markdown-table-of-contents-0.0.1.vsix
node_modules
out
package-lock.json
package.json
src
tsconfig.json
tslint.json

it is listed there - Dmitrij Kultasev
这明显表示在安装扩展时,VS Code没有安装您的依赖项。这通常发生在您的扩展安装目录中不存在package.json文件的情况下。如果该文件已经存在,则必须检查您是否已经正确发布了代码。 - Pratyush Sharma
1
你是否曾经找到了解决这个问题的方法?我自己也遇到了类似的问题。 - RonH
是的,我做过。不幸的是,那是很久以前的事了,我什么都记不起来了 :) - Dmitrij Kultasev
1
哈哈,这就是为什么你需要回答自己的问题 :) - RonH
显示剩余3条评论
3个回答

4
对我来说,解决方案是在扩展的代码根目录中运行 npm install <package_name>(注意不要加上“-g”)。Vscode将扩展放在其[扩展文件夹][1]中,导航到那里进行npm install
例如:对于Linux/Mac。
cd ~/.vscode/extensions
cd your.extension
npm install

这样做会自动将其添加到devDependencies中,从那时起扩展名就可以完美地工作了。


cd ~/.vscode-oss/extensions 这个命令对我有用。 - Adam Beleko
或者你可以一开始就将 node_modules 包含在你的 vsix 中。 - Mugen
你如何包含所有的node_modules? 我目前遇到了@xmldom/xmldom的问题。它在文件夹中,并且已经安装,但是由于某种原因,当安装该软件包时,它会丢失,导致VSCode无法执行我的扩展程序。 - Holm76
如果在根目录下且未列入.vscodeignore清单中,则会将其与扩展包一起包含。 - Mugen
我缺少'typescript'。所有其他的node_modules都在文件夹中,只有typescript不见了。有什么建议吗? - Terry

0
我遇到了同样的问题,解决办法是从npm切换到yarn,删除锁文件和node_modules,然后运行yarn install。之后vsce package就正常工作了。

你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步细节,比如引用或文档,以便他人能够确认你的回答是否正确。关于如何撰写好的回答,你可以在帮助中心找到更多信息。 - Community

0
对我来说解决方案是确保在package.json文件中将typescript列在dependencies而不是devDependencies中。

将其移动到dependencies中会强制包含typescript节点模块在我的.vsix中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接