如何在 babel-plugin-module-resolver 中使用 root 选项?

Mah*_*i N 6 ecmascript-6 reactjs babeljs react-native babel-plugin

我正在尝试在反应本机应用程序中使用babel-plugin-module-resolver 。当我使用这样的插件配置时,babel.config.js它工作得很好。

plugins: [
    [
      'module-resolver',
      {
        extensions: ['.ios.js', '.android.js', '.js', '.json'],
        alias: {
          utils: './src/utils',
        },
      },
    ],
  ],
Run Code Online (Sandbox Code Playgroud)

但问题是我必须在每个别名路径中写入 ./src 。所以我尝试使用root选项。这是我尝试过的代码

plugins: [
    [
      'module-resolver',
      {
        root: './src', // I also tried ['./src']
        extensions: ['.ios.js', '.android.js', '.js', '.json'],
        alias: {
          utils: 'utils', // already tried '/utils' and './utils'
        },
      },
    ],
  ],
Run Code Online (Sandbox Code Playgroud)

但这对我不起作用,我收到此错误:

error: Error: Unable to resolve module '../../../utils/Themes' from 'src/components/shared/Container.js': 
Run Code Online (Sandbox Code Playgroud)

那么正确的使用root选项的方法是什么呢?

小智 4

好吧,我找到了一个解决方案,虽然不能真正解决问题,但可以使其发挥作用。

我正在使用 typescript 和 babel 来编译它。

我的文件结构是这样的:

|-dist
|-src
  |-db
     |-connect
        |-index.ts
  |-index.ts
|-.babelrc
|-etc...
Run Code Online (Sandbox Code Playgroud)

db/connect当 babel 编译我的代码时, in的导入src/index.ts是这样的:

import ... from "db/connect"
Run Code Online (Sandbox Code Playgroud)

对此:

var _connect = require("../db/connect");
Run Code Online (Sandbox Code Playgroud)

并且应该是这样的:

var _connect = require("./db/connect");
Run Code Online (Sandbox Code Playgroud)

你可以看到,babel 支持一个文件夹,无论我怎么尝试,它仍然缺少 require 路径。

因此,为了解决这个问题,我只需将/dist路径添加到.babelrc

前:

|-dist
|-src
  |-db
     |-connect
        |-index.ts
  |-index.ts
|-.babelrc
|-etc...
Run Code Online (Sandbox Code Playgroud)

后:

[
   "module-resolver",
      {
         "alias": {
            "db": "./dist/db",
         }
      }
   }
]
Run Code Online (Sandbox Code Playgroud)

正如你所说,它root不会影响 require 路径,所以我只是将其删除。

这并不能解决问题,但可以使其发挥作用。

希望它有帮助,祝你好运!:)