如何检查脚本是否在 Node.js 下运行?
在 JavaScript 中,没有任何特定的函数或方法可以获取脚本运行的环境。但是我们可以做一些检查来确定脚本是在 Node.js 上还是在浏览器中运行。
在 Node.js 中使用进程类:每个 Node.js 进程都有一组内置功能,可通过全局进程模块访问。 process模块不是必需的——它实际上是当前正在执行的进程的包装器,它公开的许多方法实际上是对核心 C 库调用的包装器。
代码片段:
if ((typeof process !== 'undefined') &&
(process.release.name.search(/node|io.js/) !== -1)) {
console.log('this script is running in Node.js');
} else {
console.log('this script is not running in Node.js');
}
在这个代码片段中,我们所做的只是检查进程模块是否存在。如果流程不是未定义的,那么我们必须检查流程类中 release 方法的 name 属性是 node 还是 io.js(对于节点的 io.js 版本)。
在 Node.js 中使用模块:这是普遍接受的解决方案,也用于 underscore.js 库中。这种技术实际上对服务器端来说非常好,因为当调用require函数时,它将this对象重置为空对象,并再次为您重新定义模块,这意味着您不必担心任何外部篡改.只要你的代码加载了require,你就是安全的。
代码片段:
if (typeof module !== 'undefined' && module.exports) {
console.log('this script is running in Node.js');
} else {
console.log('this script is not running in Node.js');
}
然而,这在浏览器上是分崩离析的,因为任何人都可以轻松地定义一个模块,使其看起来像是您正在寻找的对象。一方面,这可能是您想要的行为,但它也规定了库用户可以在全局范围内使用哪些变量。也许有人想将一个变量与命名模块一起使用,该模块内部有导出以供其他用途。
使用 Node.js 运行代码的步骤:
- 使用上述代码创建文件index.js 。
- 使用以下命令在终端上运行该文件:
node index.js
输出:
在浏览器中运行代码的步骤:
- 使用上述代码创建文件index.js 。
- 使用以下代码在同一目录中创建另一个文件index.html :
GFG How to check whether a script is running under Node.js or not?
- 要运行代码,双击index.html ,它将在浏览器中打开。
- 打开浏览器控制台以检查输出。
输出:
结论:您可以使用上述任何一种方法来确定您的脚本是否在 Node 中运行。但是试图弄清楚你的代码正在运行什么环境的问题是任何对象都可以被修改和重新声明,这使得几乎不可能弄清楚哪些对象是环境的原生对象,哪些对象已经被程序修改了。