Javascript 在NodeJS中运行browserify ed应用程序
这听起来可能有点反常,但我想修改相当大的JavaScript代码库的一部分,以便它可以在NodeJ上运行。代码是以CommonJS风格编写的,具有使用Javascript 在NodeJS中运行browserify ed应用程序,javascript,node.js,browserify,amd,Javascript,Node.js,Browserify,Amd,这听起来可能有点反常,但我想修改相当大的JavaScript代码库的一部分,以便它可以在NodeJ上运行。代码是以CommonJS风格编写的,具有使用browserify和deamdify的gulp构建过程。我没有设置任何这些东西,我只是对AMD和CommonJS模式略知一二 为了提高性能,我想这样做是为了将一些代码转换为服务器端API,但它仍然需要能够在浏览器中运行 起初我以为我可以简单地使用这些库而不运行browserify,但我遇到了如下错误: /*global define*/ defi
browserify
和deamdify
的gulp
构建过程。我没有设置任何这些东西,我只是对AMD和CommonJS模式略知一二
为了提高性能,我想这样做是为了将一些代码转换为服务器端API,但它仍然需要能够在浏览器中运行
起初我以为我可以简单地使用这些库而不运行browserify,但我遇到了如下错误:
/*global define*/
define([
'./defaultValue'
], function(
defaultValue) {
"use strict";
ReferenceError:未定义定义
因为有些库是这样写的:
/*global define*/
define([
'./defaultValue'
], function(
defaultValue) {
"use strict";
看起来我需要运行deamdify
,这是一个browserify转换…因此我需要运行browserify
然而,这样做的一个缺点似乎是,它生成了一个整体的Javascript
文件(当然),然后对该文件进行全部解析,并且失败了,因为它包含对不存在的浏览器对象(document.location
)的引用。我希望不要使用那些引用浏览器对象的代码
所以我的问题是:
窗口
等。在那里,您可以决定代码在哪个环境中运行,并提供适当的行为(例如,在浏览器中返回窗口
对象,在节点环境中返回不同的内容)
(二)
首先:browserify是一个运行在nodejs之上的库,所以“nodejs等价于browserify”毫无意义。。。至于避免使用单一的javascript文件:有一些节点模块使您能够在node中使用AMD模块(例如),这可能会有所帮助。另一种方法是将AMD模块转换为节点模块-这取决于AMD模块的数量
希望这有帮助