【发布时间】:2017-09-28 12:23:06
【问题描述】:
将我的 node.js 应用程序从开发(localhost osx 10.12.4)转移到生产(Ubuntu 16.04 和 Amazon Linux AMI 2017.03.0,我相信它是基于 CentOS)时遇到了一个奇怪的问题。我有一个文件只在生产/Linux 服务器上给我问题,而不是在 localhost osx 上。
我有一个模块,它位于调用它的文件上方的两个目录:
controller.counties.js 导入 manager 模块如下:
import Manager from '../../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 操作系统中不断收到cannot find module ../../common/objects/Manager,但它在 localhost OSX 上运行良好。
有没有人知道为什么我在 OSX 和 Linux 之间会有这些不一致的地方?据我了解,对于 Node.js,Linux 和 OSX 应该几乎相同,但是 Linux 会阻止从更高目录导入/需要模块吗?
【问题讨论】:
-
您是否更新了对生产的依赖?这可能是因为您尚未下载 npm 模块。对吗?
-
这需要一个本地定义的模块。如果我要导入一个 npm 模块,我会说
import Manager from 'manager';节点的唯一区别是本地的 6.9.5 和 prod 的 6.10.*,但我认为这不会是一个重大变化 -
由于您在路径中使用了一些大写字母,您可能会发现路径大小写敏感度与 Linux 区分大小写而 OSX 不区分的不同操作系统不同。您是否 100% 确定您在 Linux 上的路径中的大小写完全正确?
标签: node.js linux macos import require