vscode可以支持ES6导入的绝对路径引用吗?

时间:2016-12-02 16:43:56

标签: javascript visual-studio-code

而不是相对路径,例如import Foo from '../Foo',当你有一个更大的项目时会变得毛茸茸,我们已经开始使用“绝对”路径,例如import Foo from '~/utils/Foo',其中~映射到我们的根JS目录(比如说assets/js或者不是)。

这似乎打破了vscode的控制点击导航,我怀疑它所做的所有自动/隐式推理,因为它从根本上无法遵循导入语句。

有没有办法将~映射到vscode中的特定文件夹/子文件夹,以便再次使用?

(理想情况下,我们可以有多个映射,例如,一个用于我们在src/main/js中生成JS代码,一个用于我们的测试JS代码,例如在src/test/js中。)

1 个答案:

答案 0 :(得分:3)

我不认为普通的JavaScript项目支持这一点,但是对于Typescript项目它是支持的(我将详细介绍一个可以用来为JS项目启用它的解决方法)。如果您希望更好地支持此类功能,我建议您open a feature request

要在TypeScript项目中启用此功能,请在项目的根目录中创建tsconfig.json文件:

{
    "compilerOptions": {
        "baseUrl": ".",
        "paths": {
            "~/*": [
                "assets/js/*"
            ]
        }
    }
}

paths是您想要的映射。 Here's more information about mappings

现在任何形式的导入:

import Foo from '~/utils/Foo'

将被解析为

 import Foo from 'assets/js/utils/Foo'

默认情况下,这只适用于TypeScript文件,但您也可以通过"allowJs": truetsconfig.json添加到JS文件中来启用它,如下所示:

{
    "compilerOptions": {
        "baseUrl": ".",
        "paths": {
            "~/*": [
                "assets/js/*"
            ]
        },
        "allowJs": true
    }
}

这应该为项目中的JavaScript文件启用相同的智能感知功能。

在JavaScript情况下,请记住paths配置仅适用于工具支持。它不会改变代码的运行时行为,因此您仍然必须确保运行时可以正确解析模块路径'~/utils/Foo'

如果您希望更好地支持此方案,或者对如何改进这些方案有任何想法,请考虑针对VSCode打开功能请求。