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

IT技术 javascript
2021-02-11 20:36:59

例如:

import Component from '@/components/component'

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

6个回答

module标识符的含义和结构取决于module加载器module捆绑器module加载器不是 ECMAScript 规范的一部分。从 JavaScript 语言的角度来看,module标识符是完全不透明的。所以这真的取决于你使用的是哪个module加载器/捆绑器。

你很可能在你的 webpack/babel 配置中有类似babel-plugin-root-import的东西。

基本上它意味着从项目的根..它避免必须编写类似的东西import Component from '../../../../components/component'

编辑:它存在的一个原因是因为import Component from 'components/component'不这样做而是在node_modules文件夹中搜索

感谢@felix-kling 改进我的回答。这是一个比“不是标准的东西”更好的解释:)
2021-03-25 20:36:59

知道它很旧,但我不确定它是如何定义的,所以了一下,过来,挖得更深一些,最后在我的Vue-CLI ( Vue.js ) 生成的 Webpack 配置中找到了它

resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
    '@': path.join(__dirname, '..', dir)
    }
},

所以它是一个别名,在这种情况下指向 vue-cli 生成的项目 src 目录的根目录

是否可以使用这样的东西?'@*': ['client/src/*']只取后面 的部分@,以便我可以import X from '@components/x正确地尝试访问client/src/components/xTS + VSCode 已经允许在 tsconfig.json 中以这种确切的形式进行,但是 webpack 错误与Can't resolve '@components/x' in 'client/src/'. 当我将它更改为您的解决方案并且它的导入路径import X from '@/components/x'立即开始工作时,因此路径是正确的。
2021-03-25 20:36:59
@Qwerty 不知道,不知道 @* 东西不知道它存在于 VSCode 中,所以无能为力
2021-03-26 20:36:59

为了使本的回答更全面:

首先,你需要添加babel-plugin-root-import在你devDependenciespackage.json(如果使用yarnyarn add babel-plugin-root-import --dev)。然后在您.babelrcplugins密钥中添加以下行

"plugins": [
[
  "babel-plugin-root-import",
  {
    "rootPathPrefix": "@"
  }
]
]

现在,您可以使用@. 例如:

代替

import xx from '../../utils/somefile'

你可以

import xx from '@/utils/somefile'

我将插件添加到我的 devdependencies 但我没有 .babelrc 。我什至在根目录中创建了它,但仍然不起作用?我只有 babel.config.js
2021-04-12 20:36:59

如上所述,此功能默认不在 JS 中。你必须使用 babel 插件才能享受它。它的工作很简单。它允许你为你的 JS 文件指定一个默认的根源,并帮助你将文件导入映射到它。要开始通过 npm 安装:

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

或者

yarn add babel-plugin-root-import --dev

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

{
  "plugins": [
    ["babel-plugin-root-import", {
      "rootPathSuffix": "the-preferred/root/of-all-your/js/files",
      "rootPathPrefix": "@"
    }]
  ]
}

使用上面的配置,您可以简单地从该源导入,例如:

import Myfile from "@/Myfile" 

不做所有这些时髦的事情:

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

请注意,您还可以将符号更改为任何"~"可以漂浮您的船的符号

我正在使用 VS 代码来构建 React Native 应用程序。

你需要的是:

  1. 在您的应用程序的根路径下创建一个 jsconfig.json 在此处输入图片说明

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

    { "compilerOptions": { "baseUrl": ".", "target": "ES6", "module": "commonjs", "paths": { "@/ ":["src/ "], "@components / " : ["src/components/ "], "@core/ " : ["src/core/ "] } }, "exclude": ["node_modules"] }

基本上就像“快捷方式”:[“abs_path”]