在NodeJS中运行browserify-ed应用程序

这可能听起来有些不正常,但我想调整一个非常大的JavaScript代码库的一部分,以便它可以在NodeJS上运行。 代码是用CommonJS风格编写的,使用了一个使用deamdifydeamdify构build过程。 我没有设置任何东西,我只是熟悉AMD和CommonJS模式。

我想这样做是为了将一些代码转换为服务器端的API,但是仍然需要能够在浏览器中运行。

起初,我以为我可以简单地使用库,而不运行browserify,但我碰到这样的错误:

ReferenceError:define没有定义

因为有些库是这样写的:

 /*global define*/ define([ './defaultValue' ], function( defaultValue) { "use strict"; 

所以它看起来像我需要运行deamdify ,这是一个deamdify转换…因此,我需要运行browserify?

然而,其中一个缺点似乎是,它生成了一个单一的Javascript文件(当然),然后全部parsing,并失败,因为它包含对不存在的浏览器对象( document.location )的引用。 我希望只是不使用引用浏览器对象的代码位。

所以我的问题:

  1. 有没有关于如何进行的指导? 任何教程? 我在Google上找不到太多东西,但我可能会用错的。
  2. 是否有一个NodeJS等效于Browserify? 这似乎有点奇怪,没有必要build立一个单一的Javascript文件,然后运行服务器端。

任何指导,build议等非常受欢迎。

1)在节点内部使用(大)浏览器代码库可能具有挑战性。 我想创build一个为节点提供虚假浏览器环境的环境模块可以完成这项工作,但是这可能需要很多工作,但是您必须通过引用环境模块来更改每个浏览器环境对window等的引用。 在那里你可以决定代码在哪个环境中运行,并提供适当的行为(例如,在浏览器中返回window对象,在节点环境中返回不同的东西)。

2)首先:browserify是一个运行在nodejs之上的库,所以“BrowseJet的NodeJS”是没有意义的…至于避免单个javascript文件:有一些节点模块可以让你使用AMD模块节点(例如amdrequire , node-amd-loader ),也许可以提供帮助。 另一种方法是将AMD模块转换为节点模块 – 这取决于AMD模块的数量。

希望这可以帮助