需要一个相对于原始代码的模块

时间:2014-11-11 16:23:29

标签: javascript node.js module

我有这个目录结构:

project/
  mymodule.js
  test/
    run.js
    node_modules/
      canvas/

我有这样的代码:

run.js

var Canvas = require(__dirname+"/../mymodule");

mymodule.js

if (typeof require==='function' && typeof module==='object'){
  // when using mymodule with Node the 'canvas' module must be available
  var canvas = require('canvas');
  module.exports = canvas;
} else {
  // code that works in a web browser, without Node
}

node test/run.js的结果是Error: Cannot find module 'canvas'

我如何才能使require来自mymodule知道相对于原始脚本?或者这与Node模块的工作方式相反?我必须从canvas目录中移动test(仅用于我的测试)吗?

1 个答案:

答案 0 :(得分:0)

如果未在require语句中放置路径,则会假定您正在尝试加载模块。如果要在代码中加载某些内容,请确保包含相对路径或绝对路径。在你的情况下:

  var canvas = require('./test/node_modules/canvas');

另一种方法是将node_modules目录放在root中,而不是Web可访问的。

project/
  mymodule.js
  node_modules/
     canvas/  
  test/
    run.js

然后在你的run.js或mymodule.js中,你可以require('canvas')正如你所期望的那样。