在浏览器中运行 node.js 时出现问题
我尝试在浏览器中运行带有 node.js 函数的应用程序。我在终端中检查,包含 node.js 函数的 javascript 文件运行良好。但是,当我运行连接到 javascript 文件的 html 文件时,浏览器返回错误,提示未定义 require 函数。我理解这是因为浏览器无法单独运行 node.js
我尝试运行的 node.js 代码用于访问 Watson 视觉识别 API:
var watson = require('./node_modules/watson-developer-cloud');
watson.visual_recognition({
username : '49f5d504-9387-45c6-9fda-9b58a9afc209',
password : 'IITqAn0VPaFr',
version : 'v2-beta',
version_date : '2015-12-02'
}).listClassifiers({}, function(err, response) {
if (err){
console.log(err);
} else {
console.log(JSON.stringify(response, null, 2));
}
});
我知道我拥有所有必需的文件,因为该文件在终端中运行。因此,在连接 javascript 文件之前,我继续在 index.html 中包含:
<script src ="https://cdn.socket.io/socket.io-1.4.5.js"></script>
。
但是,我的 javascript 文件仍然返回相同的错误,提示未定义 require 函数。我做错了什么吗?有什么方法可以在具有 node.js 的浏览器中运行这个 javascript 文件,但不使用 browserify(这在过去给我带来了一些目录问题)?
虽然 Node 和浏览器都运行 JavaScript (ECMAScript),但这并不意味着环境相同。
具体来说,浏览器中有许多 API 和全局变量在 Node 中不可用(document、window 等),而 Node 中存在其他全局变量和 API 在浏览器中不可用(require 等)
为了执行使用 Node 特定全局变量(如
require()
)的代码,需要为您定义和填充这些全局变量。这正是 webpack、browserify 或 systemjs 等工具为您做的事情。即便如此,您仍需要确保您引入的模块将在浏览器中运行。
浏览器目前还没有像 nodejs 那样的内置模块系统。如果您想使用模块(如在 node 中),请考虑使用 browserify 或 requirejs 库。