@符号在javascript导入中做了什么?

Las*_*ser 120 javascript

例如:

import Component from '@/components/component'
Run Code Online (Sandbox Code Playgroud)

在我看到的代码中,它的行为类似于../相对于文件路径的目录中的一个级别,但我想更一般地了解它的作用.遗憾的是,由于符号搜索问题,我无法在线找到任何文档.

Ben*_*Ben 137

模块标识符的含义和结构取决于模块加载器模块捆绑器.模块加载器不是ECMAScript规范的一部分.从JavaScript语言的角度来看,模块标识符完全不透明.所以它实际上取决于您使用的模块加载器/捆绑器.

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

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

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

  • 感谢 @felix-kling 改进我的回答。这是一个比“不是标准的东西”更好的解释:) (5认同)

Can*_*Can 77

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

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

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

  • 我也使用这个解决方案,我想强调的是,这是与 vue 无关的,并且可以在“任何使用 Webpack 的设置”中完成。(因为在答案中将 vue.js 设置为蓝色链接可能会让一些人忽略这个答案)。 (2认同)

Ali*_*our 25

为了使babel-plugin-root-import答案更全面:

首先,你需要添加devDependencies在你package.jsonyarn(如果使用yarn add devDependencies --dev:.babelrc).然后在您plugins@密钥中添加以下行:

"plugins": [
[
  "babel-plugin-root-import",
  {
    "rootPathPrefix": "@"
  }
]
]
Run Code Online (Sandbox Code Playgroud)

现在,你可以使用import xx from '../../utils/somefile'.例如:

代替

import xx from '@/utils/somefile'

您可以

babel-plugin-root-import


Tim*_*Tim 13

如果你使用 Typescript,你可以通过简单地使用你的tsconfig.json像这样来实现这一点:

{
  "compilerOptions": {

    ...

    "baseUrl": ".",
    "paths": {
      "@lib/*": ["app/lib/*"]
    }
  },
}
Run Code Online (Sandbox Code Playgroud)


Wal*_*ale 7

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

npm install babel-plugin-root-import --save-dev
Run Code Online (Sandbox Code Playgroud)

要么

yarn add babel-plugin-root-import --dev
Run Code Online (Sandbox Code Playgroud)

.babelrc在应用程序的根目录中创建一个,然后根据自己的喜好配置以下设置:

{
  "plugins": [
    ["babel-plugin-root-import", {
      "rootPathSuffix": "the-preferred/root/of-all-your/js/files",
      "rootPathPrefix": "@"
    }]
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

import Myfile from "@/Myfile" 
Run Code Online (Sandbox Code Playgroud)

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

"/../../../Myfile"
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以将符号更改为"~"使您的船浮起的任何符号。


小智 5

我正在使用 VS 代码来构建 React Native Apps。

你需要的是:

  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”]