使用rekuire,requirish或rfr解决nodejs时找不到模块需要相对问题

时间:2015-01-27 17:06:24

标签: javascript npm browserify

我想通过使用推荐的解决方案之一来避免描述here的复杂相对路径问题。我遇到过三个类似的库:

我已经尝试了所有三个并且都失败了“找不到模块”或者类似的错误让我相信我做的事情从根本上是错误的。我对npm / node相对缺乏经验。我只使用浏览器中的节点使用browserify将我的应用程序捆绑到一个JS文件中。

这是我非常简单的hello world示例:

结构:

lib/Bob.js
app.js

Bob.js

function Bob() {
    return "I am bob";
}

module.exports = Bob;

app.js

var Bob = require('./lib/Bob.js');

console.log(Bob());

捆绑成一个JS:

browserify app.js -o bundle.js

Chrome的控制台成功输出“我是Bob”。


现在,如果我尝试使用这些库,那么就说要求:

REQUIRISH:

npm install requirish

app.js更改

'use strict';

require('requirish')._(module);
var Bob = require('lib/Bob');

console.log(Bob());

捆绑更改

browserify -t requirish app.js > bundle.js

我收到以下错误:

Error: Cannot find module '/lib/Bob' from '/Users/ngb/projects/MyApp/src/main/resources/public/js/hello'
at /Users/ngb/.nvm/v0.10.30/lib/node_modules/browserify/node_modules/resolve/lib/async.js:42:25

RFR:

'use strict';

var rfr = require('rfr');
var Bob = rfr('lib/Bob');

console.log(Bob());

建筑

browserify app.js -o bundle.js -d

Chrome控制台输出以下错误:

Uncaught Error: Cannot find module 'lib/Bob'

1 个答案:

答案 0 :(得分:0)

Browserify可以通过解析字符串“require”查找模块。 如果您要同时使用副客户端和服务器,请使用rfr作为服务器端,browserify-rfr作为browserify的转换。

在我看来,“rfr”是最好的,因为这个模块不会覆盖原始要求。

-------注意!附加信息, 今天,browserify-rfr版本将我的本地文件路径留给了bundle.js。这可能会导致另一个问题,所以我选择requirish。由于要求通过推送到module.paths的新路径来改变原始需求的行为,所以你总是会注意到并警告你的同事!

谢谢!

https://www.npmjs.com/package/requirish