我想通过使用推荐的解决方案之一来避免描述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'
答案 0 :(得分:0)
Browserify可以通过解析字符串“require”查找模块。 如果您要同时使用副客户端和服务器,请使用rfr作为服务器端,browserify-rfr作为browserify的转换。
在我看来,“rfr”是最好的,因为这个模块不会覆盖原始要求。
-------注意!附加信息, 今天,browserify-rfr版本将我的本地文件路径留给了bundle.js。这可能会导致另一个问题,所以我选择requirish。由于要求通过推送到module.paths的新路径来改变原始需求的行为,所以你总是会注意到并警告你的同事!
谢谢!