【问题标题】:What Path is the Babel Plugin module-alias Actually Using?Babel 插件模块别名实际使用的是什么路径?
【发布时间】:2018-05-19 18:50:52
【问题描述】:

我正在尝试将 Babel 的“module-alias”插件与“proxyquire”测试库一起使用,但运气不佳。

图书馆背景故事

(如果您熟悉模块别名/代理查询,请随意跳过)

Proxyquire 让您模拟出模块的依赖项以进行测试,如下所示:

const someFunctionToTest = 
  proxyquire(pathToSomeFunctionToTestsModule, {
    pathToDependency: fakeVersionOfDependency
  });

Babel 的 module-alias 插件可以让你的导入路径更加方便和一致。例如,我可以指定(在 .babelrc 中):

"plugins": [
  ["module-alias", [
    { "src": "./", "expose": "~" }
  ]],

然后不必键入(从嵌套三个目录的模块导入时)require('../../../someModule') I can just typerequire('~/someModule')`。

问题

我的问题是,它们不能一起工作。如果我有someModule,那取决于someDependency

// src/someModule.js
const someDependency = require('~/src/someDependency');
doSomethingWith(someDependency);

然后我想用someDependency 的模拟版本测试someModule,我应该可以做到:

const proxiedSomeModule = 
  proxyquire('~/src/someModule', {
    '~/src/someDependency': fakeVersionOfSomeDependency
  });

...但是proxyquire 告诉我`错误:找不到模块'~/src/someModule'。

大概(“幕后”)Babel 正在将 '~/src/someModule' 转换为其真实路径,因此当 Proxyquire 查找别名路径时它找不到它。

问题

我的问题是:在 Babel 转换它之后(即当 proxyquire 处理它时),有什么方法可以找出 '~/src/someModule' 的真实路径是什么?或者有什么方法可以让 proxyquire 只使用别名路径?

【问题讨论】:

    标签: babeljs proxyquire


    【解决方案1】:

    原来由模块解析器生成的“真实”路径(对于'~/someModule')只是../../someModule 路径。但是,事实证明,没有必要手动转换路径。

    模块解析器插件会将参数转换为其transformFunctions 列表中的任何函数。这意味着您可以通过执行以下操作将任何字符串转换为其非别名形式:

    1. 定义一个简单的传递函数,例如const resolveModulePath = path => path;
    2. 将该函数(连同proxyquire)添加到.babelrc 中的transformFunctions 列表中:

      ["模块解析器", {
      "transformFunctions": ["proxyquire", "resolveModulePath"]
      }]

    3. 使用resolveModulePath 包装任何不是函数参数的路径:

      proxyquire('~/some/path/someModule', {
      [resolveModulePath('~/some/other/path')]: {
      someFunction: fakeSomeFunction
      }
      })

    请注意,上面的第一个路径不需要转义,因为它是转换函数的参数。只有第二条路径 ('~/some/other/path') 需要包装,因为它是作为参数的对象的一部分;字符串本身不是参数,直到它被包装。

    欲了解更多信息,请参阅:https://github.com/tleunen/babel-plugin-module-resolver/issues/241#issuecomment-350109168

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 2022-10-25
      • 2019-10-07
      • 2020-02-24
      • 2021-08-10
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多