在使用jest进行测试时,配置babel以编译node_modules中的特定包

时间:2018-02-19 23:19:43

标签: reactjs jestjs babel

默认情况下,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应该不是问题。

1 个答案:

答案 0 :(得分:0)

终于明白了。而不是将忽略放在.babelrc中,而是需要进入transformIgnorePatterns中的package.json jest setting

  "jest": {
    "transformIgnorePatterns": [
      "<rootDir>/node_modules/(?!special-module)"
    ]
    ...
  }

事实上,我发现我根本不需要.babelrc,因为babel-jestautomatically installed