Node.js 要求模块行为在操作系统之间是不同的

标签 node.js linux macos import require

我遇到了一个奇怪的问题,将我的 node.js 应用程序从开发(localhost osx 10.12.4)转移到生产(我认为是基于 CentOS 的 Ubuntu 16.04 和 Amazon Linux AMI 2017.03.0)。我有一个文件只在生产/Linux 服务器上给我问题,在 localhost osx 上没有问题。

我有一个模块,它位于调用它的文件上方的两个目录中:

controller.counties.js 导入 manager 模块如下: 从“../../common/objects/Manager”导入管理器; 它被编译为 ES5 为: const Manager = require('../../common/objects/Manager);

Manager.js:

const Manager = {
  req: {},
  res: {},
  data: [],
  init: function(req,res) {
    const mng = this;
    mng.req = req;
    mng.res = res;
    mng.data = req.body;
    return Promise.resolve(mng);
  },
  handle: function(fn, ...params) {
    return async (manager) => {
        const args = getArgs(params, manager);
        const data = await fn(args);
        const mng = this;

        mng.req = manager.req;
        mng.res = manager.res;
        mng.data = data;
        return Promise.resolve(mng);
    };
  },
  pass: function(fn, ...params) {
    return async (manager) => {
        const args = getArgs(params, manager);
        await fn(args);

        const mng = new Manager();
        mng.req = manager.req;
        mng.res = manager.res;
        mng.data = manager.data;
        return Promise.resolve(mng);
    };
   }
};

function getArgs(params, manager) {
  const args = [];
  params.forEach(function(param) {
    if (param.indexOf('.') > -1) {
        const split = param.split('.');
        const value = getDeepValue(manager, split);
        return args.push(value);
    } else {
        const val = manager[param];
        args.push(val);
    }
  }, this);
 return args;
}

export function getDeepValue(object, array) {
 const prop = array[0];
 const val = object[prop];
 if (array.length === 1) {
    return val;
 }
 const newArray = array;
 newArray.splice(0, 1);
 return getDeepValue(val, newArray);
}

module.exports = Manager;

我不断收到 在 Linux 操作系统中找不到模块 ../../common/objects/Manager 但它在本地主机 OSX 上运行良好。

有人知道为什么我在 OSX 和 Linux 之间会出现这些不一致吗?据我了解,对于 Node.js,Linux 和 OSX 应该几乎相同,但 Linux 会阻止从更高目录导入/请求模块吗?

最佳答案

jfriend00 刚刚回答了我的问题-看评论

关于Node.js 要求模块行为在操作系统之间是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43713133/

相关文章:

javascript - 自动递增序列 Mongoose

javascript - 使用nunjucks时 block 结束报错

python - conda 应该如何处理头文件?

php - 运行脚本修改 nginx 服务器配置的最佳方式

macos - Mac/Cocoa - 进程独立于用户

xcode - OS X Today Widget - 如果内容已更改,如何在 NCWidgetProviding.widgetPerformUpdateWithCompletionHandler 中检测?

node.js - 带有 http-proxy 和 express 的虚拟主机

node.js - 如何组织我的规范文件?

c++ - 在 Linux 中运行 C++

c++ - 使用 libc++ 导致 GDB 在 OS X 上出现段错误