2016-04-26 98 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開始,現在這個分支已經過時了,我現在沒有時間讓它工作。 如果其他人可以驗證這是否適用於他們,我會將其標記爲正確。 –