如何在 NodeJS 中 运行 浏览器化应用程序?

How can I run browserify-ed app in NodeJS?

这听起来有点反常,但我想改编一个相当大的 JavaScript 代码库的一部分,以便它可以 运行 在 NodeJS 上。代码以 CommonJS 风格编写,具有使用 browserifydeamdifygulp 构建过程。我没有设置任何这些东西,我只是略微熟悉 AMD 与 CommonJS 模式。

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

起初我以为我可以在没有 运行ning browserify 的情况下简单地使用这些库,但是我 运行 遇到了这样的错误:

ReferenceError: define is not defined

因为有些库是这样写的:

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

看来我需要 运行 deamdify,这是一个 browserify 转换...因此我需要 运行 browserify?

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

所以我的问题:

  1. Is there any guidance on how to proceed? Any tutorials? I couldn't find much on Google, but I may well be using the wrong terms.
  2. Is there a NodeJS equivalent to Browserify? It seems a bit weird and unnecessary to build a monolithic Javascript file and then run that server-side.
  1. 在节点内使用(大型)浏览器代码库可能具有挑战性。我想创建一个为节点提供假浏览器环境的环境模块可以完成这项工作,但这可能需要大量工作,您必须将每个浏览器环境引用更改为 window 等。环境模块。在那里,您可以决定代码在哪个环境中 运行 并提供适当的行为(例如,在浏览器中返回 window 对象,在节点环境中返回一些不同的东西)。

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