2016-04-26 97 views
6

我试图在运行AVA测试时将源文件(及其在node_modules中的依赖项)转发。我已经配置了AVA要求babel-register并继承我.babelrc文件与package.json如下:使用babel-register与AVA和.babelrc的“”忽略“:false`,但node_modules没有被转发

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

而这.babelrc

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

我有a test spec that imports a source file与和that 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"ignore": false设置没有传递到babel-register。我可以从babel文档中看到,您可以explicitly pass an ignore option to babel-register,但我不知道如何从AVA配置中执行此操作。我甚至尝试添加下列到它导入源文件前行我的测试文件,但我还是看到了同样的错误:

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

我想我可以添加测试前transpile一步,但我想确保我不仅仅是首先缺少一些AVA或者babel配置。

+0

你有没有找到答案?我有一个类似的问题。 – alexeybondarenko

+0

不,还没有。在这种情况下,我现在只选择不使用AVA。 –

回答

4

这在巴贝尔本身发出相关 - 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"

+0

谢谢@floatdrop。我检查了我的旧分支尝试过这一点,我_think_它解决了这个问题,因为我不再看到上述错误。但是,我现在得到其他错误。我从这个项目中使用AVA开始,现在这个分支已经过时了,我现在没有时间让它工作。 如果其他人可以验证这是否适用于他们,我会将其标记为正确。 –