【问题标题】:Nodejs with JEST how to import using ES6 and relative path?带有 JEST 的 Nodejs 如何使用 ES6 和相对路径导入?
【发布时间】:2020-08-13 19:30:09
【问题描述】:

我想避免这种情况:

const SomeMethod = require('../shared/SomeMethod')

改为使用更现代的东西:

import { SomeMethod } from '/shared'

(在后台):/shared 目录当然包含一个索引文件,返回带有 SomeMethod 属性的对象,该属性也包含在一个文件中。

当我使用 JEST 时,我需要解决两件事:1 是安装的节点支持 ES6 导入,2 是 JEST 会熟悉相对路径 - 请注意我使用了 **/**shared所以这意味着 - 转到 src 目录并从那里开始。

但是如何实现呢?

【问题讨论】:

  • 你在使用 babel 吗?
  • 我正在使用 Parcel bundler 来运行应用程序,它使用了 Babel。但请注意,从应用程序运行到测试运行存在差异 - 测试由 JEST CLI 运行,其配置可能与 Parcel 的内置配置不同。

标签: javascript node.js jestjs es6-modules


【解决方案1】:

您可以使用babel 实现此目的。根据 jest 的文档,需要做如下操作

yarn add --dev babel-jest @babel/core @babel/preset-env

然后在项目的根目录下创建babel.config.js,内容如下

module.exports = {
  presets: [
    [
      '@babel/preset-env',
      {
        targets: {
          node: 'current',
        },
      },
    ],
  ],
};

您可以查看documentation 了解更多信息

Here 是解决相同问题的一步一步的过程

为了对 Jest 使用绝对路径,在 jest.config.js 中添加以下行

    module.exports = {
      moduleDirectories: ['node_modules', 'src'],
      ...
    };

这里,src 被视为根。您可能需要根据您的文件夹名称更改此项。

欲了解更多信息,您可以关注此article

【讨论】:

  • ES6 模块可以工作,但是'/shared' 不工作我应该指定绝对路径而不是相对路径
  • @Raz 是的,您可以尝试使用绝对路径来确定问题是否与路径有关。你能分享一下错误信息吗?
  • 是的,我说过当我使用绝对路径而不是相对路径时它可以工作。
  • 很好:) 如果解决方案解决了您的问题,请将其标记为答案。
  • 但是我想用相对路径哈哈
猜你喜欢
  • 2021-10-15
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 2019-11-12
相关资源
最近更新 更多