2014-03-06 33 views
2

我想在我的应用程序中使用自定义require()函数。 即我有节点的标准require()和一个自定义我写了需要从根开始的文件名为rootRequire()在内部它是所有:browserify检测自定义要求()

// rootRequire.js 
var path = require('path'); 

var rootPath = __dirname; 
global.rootRequire = function (modulePath) { 
    var filepath = path.join(rootPath, modulePath); 
    return require(filepath); 
}; 

module.exports = rootRequire; 

但是,即使rootRequire()内部使用节点require(),它不拿起通过该方法所需的任何文件

例子:

require('rootRequire.js'); 
rootRequire('/A.js'); // server side it works, in the browser I get an error saying can't find module A.js 
+0

你有没有想出这个解决方案? – user1157885

+0

nope。开始使用webpack,它支持并绕过这个问题 – Stefan

回答

3

也许,this会回答你的问题为什么它不适用于浏览器。

引用所有者的评论:“Browserify只能分析静态需求,它不在browserify的范围内处理动态需求”。

从技术上讲,您正尝试从您的自定义需求的变量中动态加载文件。显然,node.js可以处理它。

在browserify的情况下,当您运行CLI构建包时,所有需求都会静态加载并打包。

HTH。

+0

请注意,webpack允许处理动态需求,因此可能是一个选项。 – Aaronius

1

我的建议在这里做什么是这样的:

首先创建到需要的任何你可能会在rootRequire()使用组合。

喜欢的东西browserify -r CURRENT_PATH/A.js -r CURRENT_PATH/B.js > rootRequirePackages.js

然后,在您的网页,你可以同时包括rootRequirePackages.js和你经常browserified文件。

+0

那真的不起作用,因为我在任何地方都使用rootRequire,并且我不想跟踪我在哪里使用它 – Stefan

+0

也许您可以在项目中创建所有文件的捆绑包? :/ 另外,为什么你真的需要'rootRequire'?你不能使用'require('./ A.js')'? – Scimonster

+0

以及我不想打扰require('../../../ A.js')这类相对需要的文件。很难维护并且容易出现很多错误。我宁愿做rootRequire('lib/A.js');到处 – Stefan