我正在研究NodeJS(8.1.2版,EcmaScript 6)项目,该项目的结构类似于:
project_root/
src/
utils/
protocol_messages/
helpers.js
tests/
unit/
utils/
protocol_messages/
helpers.js
我正在使用Mocha作为测试框架编写测试。
问题
在helpers.js
下的tests/unit/utils/protocol_messages/
中,导入被测模块的正确方法是什么?
详细说明:
我想避免使用以下相对路径:require('../../../../../src/utils/protocol_messages/helpers')
。
它可以工作,但是很丑陋,如果项目结构发生变化,我也必须重写测试导入。
(我是Java语言的新手,所以我可能做错了几件事。)
更新
this question中提供的解决方案:
require.main.require
:在对this answer的评论中,“如果代码包含单元测试(如Mocha测试),则此解决方案将不起作用”。。node_modules
项目根下有一个额外的src/
似乎没有道理。如果我对以上几点有误解,请指出,因为我很茫然。在我看来,NodeJS并未提供原生方法来导入具有绝对路径的CommonJS模块。
答案 0 :(得分:1)
假设您需要一个config.js
文件,该文件出现在项目的根目录中,而该文件位于/routes/api/users/profile.js
,那么您不想将其导入为../../../config.js
module.exports.config = require('../config.js')
{
"name": "modules",
"main": "index.js",
"version": "1.0.0",
"dependencies": {}
}
npm install ./Modules
const { config } = require('modules')
这样,代码编辑器的自动完成功能也将起作用。不再有全局变量污染,相对较长的进口,不依赖环境变量的问题,而且最好的部分是,它将与pm2和nodemon一起使用。
答案 1 :(得分:0)
您可以使用wavy npm软件包。
该模块使您可以将require('../../../../ foo')之类的内容转换为 require('〜/ foo')。它的工作方式是在安装后它在app / node_modules /〜中创建一个符号链接以指向app /