@符号在javascript导入中起什么作用?

@符号在javascript导入中起什么作用?,javascript,Javascript,例如: import Component from '@/components/component' 在我看到的代码中,它的行为类似于。/在目录中相对于文件路径上升一级,但我想更全面地了解它的作用。不幸的是,由于符号搜索问题,我无法在线找到任何文档 模块标识符的含义和结构取决于模块加载器或模块绑定器。模块加载器不是ECMAScript规范的一部分。从JavaScript语言的角度来看,模块标识符是完全不透明的。因此,这实际上取决于您使用的是哪个模块加载器/绑定器 您的网页包/babel配置中很

例如:

import Component from '@/components/component'

在我看到的代码中,它的行为类似于
。/
在目录中相对于文件路径上升一级,但我想更全面地了解它的作用。不幸的是,由于符号搜索问题,我无法在线找到任何文档

模块标识符的含义和结构取决于模块加载器或模块绑定器。模块加载器不是ECMAScript规范的一部分。从JavaScript语言的角度来看,模块标识符是完全不透明的。因此,这实际上取决于您使用的是哪个模块加载器/绑定器

您的网页包/babel配置中很可能有类似的内容

基本上,这意味着从项目的根本上。。它避免了编写类似于从“../../../../../components/Component”导入组件的


编辑:它存在的一个原因是
从'components/Component'导入组件
不这样做,而是在
节点模块
文件夹中搜索

知道它很旧,但我不确定它是如何定义的,所以我查找了它,找到了它,再进一步挖掘,最后在我的()生成的网页包配置

resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
    '@': path.join(__dirname, '..', dir)
    }
},
因此,它是一个别名,在本例中指向项目的vue cli生成的src目录的根,以便更全面:

首先,您需要在
package.json中的
devDependencies
中添加
babel插件根导入
(如果使用
warn
warn添加babel插件根导入--dev
)。 然后在
.babelrc
中,将以下行添加到
插件
键中:

"plugins": [
[
  "babel-plugin-root-import",
  {
    "rootPathPrefix": "@"
  }
]
]
现在,您可以使用
@
。例如:

而不是

从“../../utils/somefile”导入xx

你可以


从'@/utils/somefile'导入xx

如上所述,默认情况下JS中没有此功能。你必须使用巴别塔插件才能享受它。它的工作很简单。它允许您为JS文件指定默认根源,并帮助您将文件导入映射到它。 要开始通过npm进行安装,请执行以下操作:

npm install babel-plugin-root-import --save-dev

在应用程序的根目录中创建一个
.babelrc
,并根据您的喜好配置这些设置:

{
  "plugins": [
    ["babel-plugin-root-import", {
      "rootPathSuffix": "the-preferred/root/of-all-your/js/files",
      "rootPathPrefix": "@"
    }]
  ]
}
使用上面的配置,您可以简单地从该源导入,如:

import Myfile from "@/Myfile" 
不做这些稀奇古怪的事:

"/../../../Myfile"

请注意,如果您的船漂浮在水面上,您也可以将符号更改为类似于
“~”
的任何符号。

我正在使用VS代码构建react本机应用程序

您需要的是:

  • 在应用程序的根路径下创建jsconfig.json

  • 在jsconfig.json中,添加以下代码:

    { “编译器选项”:{ “baseUrl”:“, “目标”:“ES6”, “模块”:“commonjs”, “路径”:{ “@/”:[“src/”], “@components/”:[“src/components/”], “@core/”:[“src/core/”] } }, “排除”:[“节点_模块”] }


  • 基本上类似于“快捷方式”:[“abs_path”]

    这是一种重新映射模块路径的方法,而不是ES本身的一部分,您必须使用babel导入功能。

    感谢@felix kling改进我的答案。这是一个比“不是标准的东西”更好的解释:)可能的复制品有可能使用这样的东西吗<代码>'@*':['client/src/*']
    这里只取
    @
    之后的部分,这样我就可以从'@components/X
    导入X,它会正确地尝试访问
    client/src/components/X
    ?TS+VSCode在tsconfig.json中已经允许这种格式,但是
    的网页包错误无法解析“client/src/”中的“@components/x”。当我将它更改为您的解决方案,并将导入路径从“@/components/X”更改为“import X”
    时,它立即开始工作,因此路径在其他方面是正确的。@Qwerty不知道,不知道@*东西不知道它存在于VSCode中,因此无法帮助我将插件添加到我的devdependences中,但我没有.babelrc。我甚至在根目录中创建了它,但仍然不起作用?我只有babel.config.js
    "/../../../Myfile"