使用带有AVA的babel-register和.babelrc的``ignore':false`,但是node_modules没有被编译

时间:2016-04-26 06:45:34

标签: babel ava

我正在尝试在运行AVA测试时编译源文件(以及它们在node_modules中的依赖项)。我已将AVA配置为需要babel-register,并在.babelrc中使用以下内容继承我的package.json文件:

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

,这在.babelrc

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

我有a test spec that imports a source filethat source file imports an ES2015 dependency from node_modules

但是,在运行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的{​​{1}}设置似乎没有传递给"ignore": false。我可以从babel文档中看到你可以explicitly pass an ignore option to babel-register,但我不知道如何从AVA配置中做到这一点。我甚至尝试在导入源文件的行之前将以下内容添加到我的测试文件中,但我仍然看到同样的错误:

babel-register

我想我可以在测试之前添加一个透明步骤,但我想确保我不是首先错过了一些AVA或babel配置。

1 个答案:

答案 0 :(得分:4)

这与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"