使用 babel-register 与 AVA 和 .babelrc 的 '"ignore" : false',但node_modules没有被转译



我正在尝试在运行 AVA 测试时转译源文件(及其在node_modules中的依赖项)。我已将 AVA 配置为要求babel-register并继承我的 .babelrc 文件,并在 package.json 中执行以下操作:

"ava": {
    "require": "babel-register",
    "babel": "inherit"
  }

这在.babelrc

{
  "presets": [ "es2015" ],
  "ignore": false
}

我有一个测试规范,它导入了一个源文件,并且该源文件从node_modules导入了ES2015依赖项:

但是,当运行ava时,我看到:

/Users/me/code/esri-rollup-example/node_modules/capitalize-word/index.js:2
export default input => input.replace(regexp, match => match.charAt(0).toUpperCase() + match.substr(1));
^^^^^^
SyntaxError: Unexpected token export

这告诉我源文件(src/app/utils.js)确实转译了,但它在node_modules(capitalize-string/index)中的依赖性没有。

当我使用 babel CLI 时,源模块和依赖项都可以很好地转译,所以看起来.babelrc"ignore": false设置并没有传递给babel-register。我可以从 babel 文档中看到,您可以显式地将忽略选项传递给babel-register,但我看不出您如何从 AVA 配置中做到这一点。我什至尝试在导入源文件的行之前将以下内容添加到我的测试文件中,但我仍然看到相同的错误:

require("babel-register")({
  ignore: false
});
我想

我可以在测试之前添加一个转译步骤,但我想确保我不会先错过一些 AVA 或 babel 配置。

这与 babel 本身的问题有关——https://phabricator.babeljs.io/T6726

但是您可以将babel-register要求放在单独的文件中(让我们将其称为.setup.js):

require('babel-register')({
    ignore: /node_modules/(?!capitalize-word)/i
});
const noop = function () {};
require.extensions['.css'] = noop; // If you want to ignore some CSS imports

然后将"require": "babel-register"更改为"require": "./.setup.js"

最新更新