0

私はsocket.ioを使用してデータをクライアントに通信し、そこでスムージーによって表示したいNodeアプリケーションを持っています。2 つの異なるノード環境に (NPM 経由で) 両方のパッケージをインストールし、どちらの場合もプロジェクトの node_modules サブディレクトリにインストールしました。環境の 1 つは BeagleBone Black で、もう 1 つは Cloud9 IDE 環境です。どちらの場合も、socket.io モジュールは解決されて正常に動作しますが、パス名の組み合わせによってスムージー モジュールが解決されることはありません (これは、GitHub から直接プルするだけで機能します)。

以下は、Cloud9 IDE のサーバー側コードの関連ビットです。

var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')

app.listen(process.env.PORT, process.env.IP);

function handler (req, res) {
  fs.readFile(__dirname + '/NotWorking.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }
    res.writeHead(200);
    res.end(data);
  });
}
.
.
.

クライアント側からの関連ビットは次のとおりです。

<!DOCTYPE html>
<html>
<head>
    <script src="smoothie/smoothie.js"></script>
    <script src="socket.io/socket.io.js"></script>
    <script>
    var line1 = new TimeSeries();
    var line2 = new TimeSeries();
    var socket = io.connect('http://demo-project.wisar.c9.io/');
    socket.on('news', function (data) {
        for (var property in data) {
            dataPoint = data[property];
        }
        line1.append(new Date().getTime(), dataPoint);
        line2.append(new Date().getTime(), 40);
        socket.emit('my other event', { my: dataPoint });
    });
</script>
.
.
.    

前述のとおり、両方のモジュールは、上記のスクリプトが存在するプロジェクト ディレクトリの node_modules サブディレクトリにあります。ノードのドキュメントには、インクルードを解決する方法が記載されています ( http://nodejs.org/api/modules.html#modules_all_together )。 index.jsルート...しかし、パスが見つからない「/」を前に置いても機能します。パスの順列や組み合わせによってスムージー モジュールが解決されることはありません。ところで、smoothie は、その名前で npm にある小さなグラフ作成アプリケーションです。

どんな助けでも大歓迎です。

4

1 に答える 1

0

現在のファイルが と同じディレクトリにあるnode_modules場合、ロードするにsmoothieは、スクリプト タグの src で次のパスを試してください。

./node_modules/smoothie/smoothie.js

パスは、 にあるsmoothie/smoothie.jsの場所を示していません。これは私にとってはうまくいきました。これがあなたにとってうまくいくことを願っています。smoothie.jsnode_modules/smoothie/smoothie.js

于 2013-07-28T06:15:38.757 に答える