Node.js 节点中不支持垫片配置,可能工作,也可能不工作

Node.js 节点中不支持垫片配置,可能工作,也可能不工作,node.js,requirejs,r.js,Node.js,Requirejs,R.js,我正在做一个在浏览器上运行良好的项目,现在我们正在尝试使用nodejs在服务器端运行它 我有以下配置: 节点:v4.2.1 npm:v2.14.7 当我试图在nodejs上运行我的项目时,得到的错误如下: Shim config not supported in Node, may or may not work 由于模块和依赖项AMD在浏览器上运行良好,我假设配置是正确的 如果我遗漏了什么,请告诉我 问候 曼尼什语 由于模块和依赖项AMD在浏览器上运行良好,我假设配置是正确的 这是一个错误的

我正在做一个在浏览器上运行良好的项目,现在我们正在尝试使用nodejs在服务器端运行它

我有以下配置:

节点:v4.2.1 npm:v2.14.7 当我试图在nodejs上运行我的项目时,得到的错误如下:

Shim config not supported in Node, may or may not work
由于模块和依赖项AMD在浏览器上运行良好,我假设配置是正确的

如果我遗漏了什么,请告诉我

问候 曼尼什语

由于模块和依赖项AMD在浏览器上运行良好,我假设配置是正确的

这是一个错误的假设。问题在于Node.js的运行有一组基本假设,这些假设与浏览器的工作方式非常不同。请考虑这个陈述:

var foo = "something";
如果在Node.js中的作用域顶部执行此操作,则创建了一个变量,该变量是节点正在执行的文件的本地变量。如果你真的想让它全球化,那么你必须明确地把它推到全球

现在,将同一条语句放在使用script元素加载到浏览器中的脚本范围的顶部。同一语句创建一个全局变量。无论是否存在var,该变量都是全局变量

RequireJS的垫片配置用于预期第二种行为的脚本。他们希望a他们在其作用域顶部声明的任何内容都泄漏到全局空间,b他们所依赖的脚本泄漏到全局空间的任何内容都可以在全局空间中使用。在节点中,这两个期望几乎总是错误的。为节点设计的模块不可能操纵全局,但这是非常罕见的

RequireJS的作者在本文中解释说,他认为RequireJS尝试在节点中复制浏览器行为是不可取的。我同意他的看法。如果要在后端运行前端代码,应将浏览器中需要填充的模块替换为设计用于在节点中运行的模块