Jest 无法从 npm 链接模块转换导入
Posted
技术标签:
【中文标题】Jest 无法从 npm 链接模块转换导入【英文标题】:Jest fails to transpile import from npm linked module 【发布时间】:2017-11-08 20:49:26 【问题描述】:我有一个包含多个模块的项目(使用Lerna),我想使用 Jest 运行测试。但是,当我测试使用共享模块(通过 Lerna 的 npm 链接模块)的代码时,似乎没有正确应用 Babel,并且出现以下错误:
SyntaxError: Unexpected token import
我的项目结构是这样的:
- my-project
|- shared
|- native
|- web
web
和 native
需要 shared
模块。当我进入shared
目录并在 Jest 中运行本地测试时,一切正常。如果我在 web
目录中运行 Jest 测试,只要我包含来自 shared
的内容,就会出现上述错误。
这是一个导致错误的超级简单的测试:
import util from 'shared';
it('returns false if not prod', () =>
expect(util.isProd()).toBe(false);
);
我的.babelrc
看起来像这样:
"presets": [
"env",
"flow",
"react"
],
"plugins": [
"flow-react-proptypes",
"transform-object-rest-spread",
"transform-class-properties"
]
我尝试了所有能找到的方法,包括:
不同的 Babel 配置,包括一个带有es2015
预设并为测试环境启用 modules
的配置
为 babel-jest 手动设置 transform
选项
如前所述,Jest 可以在 shared
模块中执行,因此 Jest 和 babel-jest
也安装在那里。
【问题讨论】:
【参考方案1】:我不得不在web
模块的package.json
中更改Jest 的transformIgnorePatterns
配置选项。
"jest":
"transformIgnorePatterns": [
"<rootDir>/node_modules/(?!shared|another)"
]
,
【讨论】:
以上是关于Jest 无法从 npm 链接模块转换导入的主要内容,如果未能解决你的问题,请参考以下文章
将 npm 链接的 React JSX 项目/模块导入 AngularJS TypeScript 模块不起作用
从 npm 本地导入 ES 模块依赖项,无需捆绑/转译第一方源