【问题标题】:javascript better import hook without navigating through relative foldersjavascript 更好的导入钩子,无需浏览相关文件夹
【发布时间】:2018-04-07 12:14:07
【问题描述】:

在我的文件夹结构中编写测试时困扰我的事情是:

//App
meteor/imports/api/tasks.js

//test
meteor/test/imports/api/tasks.test.js

所以现在当我从 tasks.js 导入一些东西时,我会像 import { task } from '../../../imports/api/tasks.js' 一样,我的文件夹结构变得比这大得多。

有没有更好的解决方案?

我在想一个导入钩子,可能在根测试目录中,所以我可以从那里导入所有东西,当我在测试时,我可以从导入钩子导入而不必做所有../../../../ 导航。

【问题讨论】:

  • 使用根,即从根开始计算路径,并将/放在路径前面。
  • root = 我的流星项目的根目录?

标签: javascript node.js meteor ecmascript-6


【解决方案1】:

使用

/imports/api/tasks.js

而不是

../../../imports/api/tasks.js

以 / 开头的标记根。

【讨论】:

  • 在 mocha 测试运行中是否有效? (我试过但没用)
  • @Gobliins 你能解释一下你是如何尝试的,以及它为什么不适合你吗?
  • 我尝试从我的测试用例中导入,我使用node_modules/.bin/mocha --compilers js:babel-core/register 运行我的测试,当我将相对路径更改为/imports/api/tasks 时,我得到cannot find moduleerror
  • @Gobliins 你错过了路径末尾的 .js 吗?
  • 检查,它就在那里
【解决方案2】:

如果你正在使用 babel,你可以将babel-plugin-module-resolver 添加到你的 babel 配置中。

一个 Babel 插件,用于在编译时为你的模块添加一个新的解析器 你的代码使用 Babel。这个插件允许你添加新的“root” 包含您的模块的目录。它还允许您设置一个 目录、特定文件甚至其他 npm 的自定义别名 模块。

模块解析器可能会与 webpack2 模块处理发生冲突,因此您需要将其限制为仅用于测试:

.babelrc 示例:

  "env": {
    "test": {
      "plugins": [
        ["module-resolver", {
          "root": ["./meteor/imports"]
        }]
      ]
    }
  }

【讨论】:

  • 这是和摩卡一起工作的吗?我尝试了"root": ["./"]"root": ["./src"],但仍然无法解决模块问题。
  • 我将它与 babel 和 jest 一起使用。只是为了检查,尝试将插件移动到 .babelrc 的根目录(没有 env/test)。
  • 如果它有效,问题出在 env 定义上,我会告诉你如何解决这个问题。
  • 我用的是babel,我的测试命令是:node_modules/.bin/mocha --compilers js:babel-core/register
  • 你使用的是什么操作系统?
猜你喜欢
  • 1970-01-01
  • 2013-04-14
  • 2020-10-12
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 2021-06-02
  • 2013-01-18
相关资源
最近更新 更多