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

Why doesn't my $.getScript work in node?

我对 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 它至少会输出一些东西。但我什么也得不到。有什么想法吗?

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

npm install jquery --save

完成后,将 var $ = require('jquery'); 添加到文件的顶部。

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

$.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');

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

相反,您应该这样做:

  1. 在命令行中导航到项目目录。如果您还没有通过 运行 npm init 并按照说明进行操作,则生成 package.json
  2. 注册 node-svm,一个 Node.js-compatible 版本的 SVM,作为 运行 npm install --save node-svm.
  3. 的依赖项
  4. 运行 npm install 下载 node-svm 及其依赖项。它们将被安装到 node_modules 子目录中。
  5. index.js 或任何项目的入口点(在 package.jsonmain 属性 中定义按照这个例子,你应该很高兴去.
  6. 运行 node index.js 并检查控制台输出。

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);
    });
});

输出

0 XOR 0 => 0
0 XOR 1 => 1
1 XOR 0 => 1
1 XOR 1 => 0