我有一个Node.js脚本所需的脚本,我想保持JavaScript引擎独立。
例如,我只想exports.x = y;
在Node.js下运行。如何执行此测试?
发布此问题时,我不知道Node.js模块功能是否基于CommonJS。
对于我给出的具体示例,一个更准确的问题是:
脚本如何判断是否需要CommonJS模块?
我有一个Node.js脚本所需的脚本,我想保持JavaScript引擎独立。
例如,我只想exports.x = y;
在Node.js下运行。如何执行此测试?
发布此问题时,我不知道Node.js模块功能是否基于CommonJS。
对于我给出的具体示例,一个更准确的问题是:
脚本如何判断是否需要CommonJS模块?
编辑:关于您更新的问题:“脚本如何告诉它是否已作为commonjs模块需要?” 我不认为可以。您可以检查是否exports
是一个对象(if (typeof exports === "object")
),因为规范要求将其提供给模块,但是所有告诉您的是... exports
是一个对象。:-)
原始答案:
我确定可以检查一些特定于NodeJS的符号( 不,您必须使用它EventEmitter
,也许require
来获取事件模块;请参见下文),但是正如David所说,最好是最好检测一下该功能(相反而不是环境)。
更新:也许类似:
if (typeof require === "function"
&& typeof Buffer === "function"
&& typeof Buffer.byteLength === "function"
&& typeof Buffer.prototype !== "undefined"
&& typeof Buffer.prototype.write === "function") {
但这只是告诉您,您所处的环境require
非常类似于NodeJS Buffer
。:-)
Node.js有process
对象,因此只要您没有其他可创建的脚本,process
就可以使用它来确定代码是否在Node上运行。
var isOnNodeJs = false;
if(typeof process != "undefined") {
isOnNodeJs = true;
}
if(isOnNodeJs){
console.log("you are running under node.js");
}
else {
console.log("you are NOT running under node.js");
}
脚本如何判断是否已将其作为commonjs模块使用?
相关:要检查它是否需要作为模块还是直接在节点中运行,可以检查require.main !== module
。
http://nodejs.org/docs/latest/api/modules.html#accessing_the_main_module
怎么样使用过程中的对象和检查execPath的node
?
process.execPath
这是启动进程的可执行文件的绝对路径名。
例:
/ usr / local / bin / node
这也是一种很酷的方法:
const isBrowser = this.window === this;
之所以可行,是因为在浏览器中,全局“ this”变量具有一个称为“ window”的自引用。该自引用在Node中不存在。
要打破上面建议的浏览器,您必须执行以下操作
this.window = this;
在执行检查之前。
获取node.js的源代码并对其进行更改,以定义类似的变量
runningOnNodeJS
。在代码中检查该变量。如果您没有自己的私有版本的node.js,请在项目中打开功能请求。要求他们定义一个变量,该变量为您提供正在运行的node.js的版本。然后检查该变量。