【发布时间】:2019-02-27 21:38:08
【问题描述】:
我正在开发一个 NodeJS (v. 8.12.0, EcmaScript 6) 项目,其项目结构类似于:
project_root/
src/
utils/
protocol_messages/
helpers.js
tests/
unit/
utils/
protocol_messages/
helpers.js
我正在使用 Mocha 作为测试框架编写测试。
问题
在tests/unit/utils/protocol_messages/下的helpers.js中,导入被测模块的正确方法是什么?
详细说明:
我想避免相对路径:require('../../../../../src/utils/protocol_messages/helpers').
它可以工作,但很难看,如果项目结构发生变化,我也必须重写测试导入。
(我是 Javascript 新手,所以我可能做错了几件事。)
更新
this question提供的解决方案:
-
require.main.require:在对this answer 的评论中,“如果代码包含像 Mocha 测试这样的单元测试,则此解决方案将不起作用”。 - 将我的实用程序提取到节点模块对我来说没有意义,因为代码是非常特定于应用程序的。
- 在我的 NodeJS 项目的
src/项目根目录下有一个额外的node_modules似乎没有意义。 - 当我只使用 NodeJS 中可用的功能并编写 CommonJS 项目时使用 Javascript 转译器似乎有点过头了。
如果我对上述任何一点有误,请指出,因为我很茫然。在我看来,NodeJS 并没有提供本地方式来导入具有绝对路径的 CommonJS 模块。
【问题讨论】:
-
@Troopers 嘿,我已经用一些 cmets 解决了可能的重复问题
-
In my answer,
babel不用作转译器(除非您想使用 es6 模块语法)它仅用作加载器与babel-plugin-module-resolver解析路径 -
所以您的意思是使用
babel和babel-plugin-module-resolver根本不会更改我的代码,因此不会生成更多的Javascript 文件?另外,如果是这种情况,即这个插件只会增强babel,我将不得不使用babel而不是node来运行我的项目,对吧? -
您可以使用babel-register 即时编译,而不是在构建时使用 babel 作为编译器。您的最后一个问题毫无意义:
babel是转译器,node是跑步者。您的项目始终在node上运行,但如果您使用babel,源代码会有所不同
标签: node.js ecmascript-6 mocha.js