在浏览器

时间:2016-03-11 23:43:15

标签: javascript html node.js

我正在尝试使用node.js运行我的浏览器。我检查了终端,我的javascript文件包含node.js函数运行良好。但是,当我运行连接到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));
    }
});

我知道我拥有所有必需的文件,因为该文件在终端中运行。因此我继续包括:

<script src ="https://cdn.socket.io/socket.io-1.4.5.js"></script>
在连接我的javascript文件之前,在我的index.html中

但是我的javascript文件仍然返回相同的错误,即未定义require函数。难道我做错了什么?有没有办法在浏览器中运行这个javascript文件有node.js但是没有使用browserify(这在过去导致了一些目录问题)?

2 个答案:

答案 0 :(得分:2)

虽然Node和浏览器都运行JavaScript(ECMAScript),但这并不意味着环境是相同的。

特别是,浏览器中有许多API和全局变量可用于节点(文档,窗口等)以及Node中的其他全局变量和API,这些变量在浏览器中不可用(需要等等。)

为了执行使用特定于节点的全局变量(如require())的代码,需要为您定义和填充这些变量。这正是像webpack或browserify或systemjs那样的东西。即使这样,您也需要确保您引入的模块将在浏览器中运行。

答案 1 :(得分:0)

浏览器还没有(像)nodejs这样的内置模块系统。如果要使用模块(如节点),请考虑使用browserifyrequirejs库。