默认情况下,babel跳过node_modules.
中的所有内容但是我在/nodemodules/special-module
下有一个模块是jsx,需要编译。
在构建主应用时,我在webpack.config.json
中通过将其包含在rules
数组中来解决此问题:
{
test: /\.jsx?$/,
exclude: /node_modules(?!\/(special-module))/,
loader: 'babel-loader',
query: {presets: ['es2015', 'react']} // to transform JSX into JS
}
但是在使用jest运行测试时不使用webpack。我收到一个错误,表明没有编译特殊模块。
.../myproject/node_modules/special-module/src/Special.jsx:151
<div>
^
SyntaxError: Unexpected token <
相反,必须在.babelrc
中设置选项,其等价物应为
{
"presets": ["es2015", "react"],
"ignore": "node_modules\/(?!special-module)"
}
我的理解是提供ignore
密钥可以防止node_modules
的默认排除,只会忽略与给定正则表达式匹配的文件。但上述似乎并不奏效。 special-module
仍未编译。这是使用bable 6.23.0,所以this bug应该不是问题。
答案 0 :(得分:0)
终于明白了。而不是将忽略放在.babelrc
中,而是需要进入transformIgnorePatterns
中的package.json
jest setting
"jest": {
"transformIgnorePatterns": [
"<rootDir>/node_modules/(?!special-module)"
]
...
}
事实上,我发现我根本不需要.babelrc
,因为babel-jest
是automatically installed。