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

webnative 需要 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 模块不起作用

React Native:npm链接本地依赖,无法解析模块

从 npm 本地导入 ES 模块依赖项,无需捆绑/转译第一方源

如何将 typescript npm 模块导入语法转换为 ECMA2015 模块导入语法

Homebrew npm install:无法符号链接

CSS 更新后 NPM 模块无法导入