为什么$ .getScript在节点中不起作用?

时间:2017-02-02 16:28:08

标签: javascript jquery node.js jsdom

我是JavaScript新手。我正在尝试执行一个.js文件,该文件使用jquery来加载带有节点的其他脚本。我的.js文件名为test.js,如下所示:

require("jsdom").env("", function(err, window) {
    if (err) {
        console.error(err);
        return;
    }
    var $ = require("jquery")(window);
    $.getScript("./svmjs/lib/svm.js").done(function(){
        console.log("loaded!")
    }).fail(function(){
        console.log("failed!")
    });
})

我正在尝试使用命令node test.js在mac上运行它,但我在控制台中没有得到任何输出。我在这做错了什么?我的印象是,donefail至少会输出一些东西。但我一无所获。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

$.getScript用于在浏览器端加载脚本。在Node.js中,您有一个更好的工具:require

直接require您的模块,而不是使用jQuery。事实上,你根本不可能完全需要jQuery。

更改

$.getScript("./svmjs/lib/svm.js").done(function(){
    console.log("loaded!")
}).fail(function(){
    console.log("failed!")
});

require('./svmjs.lib.svm.js');

答案 1 :(得分:0)

jQuery可能无法在Node.js中运行,因为它在很大程度上取决于浏览器DOM,而Node.js中没有该浏览器DOM(没有window对象或其他代码,仅适用于浏览器环境)。此外,您不需要jQuery来加载NPM包。

相反,你应该这样做:

  1. 在命令行中导航到项目目录。如果您尚未执行此操作,请运行package.json并按照说明生成npm init
  2. 通过运行node-svm注册npm install --save node-svm,与Node.js兼容的SVM版本,作为依赖项。
  3. 运行npm install以下载node-svm及其依赖项。它们将安装在node_modules子目录中。
  4. index.js或您项目的任何入口点(在main的{​​{1}}属性中定义)按照此示例操作,您应该很高兴。
  5. 运行package.json并检查控制台输出。
  6. index.js

    node index.js

    输出

    var svm = require('node-svm');
    
    var xor = [
        [[0, 0], 0],
        [[0, 1], 1],
        [[1, 0], 1],
        [[1, 1], 0]
    ];
    
    // initialize a new predictor 
    var clf = new svm.CSVC();
    
    clf.train(xor).done(function () {
        // predict things 
        xor.forEach(function(ex){
            var prediction = clf.predictSync(ex[0]);
            console.log('%d XOR %d => %d', ex[0][0], ex[0][1], prediction);
        });
    });
    

答案 2 :(得分:-2)

我假设jQuery / $是undefined。您需要使用以下命令将其安装到项目中:

npm install jquery --save

执行此操作后,将var $ = require('jquery');添加到文件顶部。

此外,如果您不在浏览器中工作并严格使用Node,则需要使用require而不是jQuery的getScript函数。 getScript更适合浏览器应用程序。