我有一个Go项目,为它构建了一个WebAssembly应用程序和一个后端服务器。这两个部分的构建和运行都没有错误。然而,VSCode会在WASM应用程序中产生一个恼人的linter错误。
could not import syscall/js (no required module provides package "syscall/js")
据我目前所知,问题是VSCode不能从构建标签中推断出它应该使用env GOOS=js GOARCH=wasm
调用gopls
,一个解决方案是将这些标签设置为workspace Go环境变量。
然而,应用程序的设计依赖于为wasm和服务器代码提供一个通用的内部包,以便每一方都能看到一些结构定义,从而简化了它们之间的接口。为此,存储库按如下方式组织(简化视图):
cmd
├── internal
│ └── common
│ ├── common.go
│ └── common_test.go
├── server
│ └── main.go
└── wasm
└── main.go
如何将VSCode配置为在连接wasm目录而不是其他目录时使用env GOOS=js GOARCH=wasm
?
发布于 2021-02-14 23:37:42
使用VSCode的Multi-Root Workspace功能提供了一个我可以接受的解决方案。我最终扁平化了我的目录层次结构(去掉了cmd/
),以更好地适应VSCode的概念。新的布局(比我的问题中显示的更详细)如下所示。
.
├── .gitignore
├── .vscode
├── README.md
├── assets
│ └── index.html
├── go.mod
├── go.sum
├── internal
│ └── common
│ ├── common.go
│ └── common_test.go
├── magefile.go
├── server
│ └── smain.go
├── wasm
│ ├── .vscode
│ │ └── settings.json
│ └── wmain.go
└── workspace.code-workspace
我使用上面链接的文档中描述的“添加文件夹到工作区”在VSCode中创建了工作区。由于不知道它是否可以工作,我添加了每个单独的文件夹,然后添加了父文件夹。保存工作区后,VSCode创建了workspace.code-workspace
文件,其内容如下所示。
{
"folders": [
{
"path": "server"
},
{
"path": "internal"
},
{
"path": "wasm"
},
{
"path": "assets"
},
{
"path": "."
}
],
"settings": {}
}%
有了代码工作区文件夹,就可以在各个文件夹中添加.vscode/settings.json文件。这提供了为Go工具链指定必要的环境变量的能力,以防止syscall/js
上的导入错误。
{
"go.toolsEnvVars": {
"GOOS": "js",
"GOARCH": "wasm"
}
}%
需要注意的一个次要事项是,层次结构顶层的空.vscode目录似乎是必需的。删除它会重新返回错误。
这个解决方案唯一让人恼火的是:
https://stackoverflow.com/questions/66188534
复制相似问题