460

Node.js、Express.js、およびJadeの組み合わせでアプリケーションを作成しています。

client.jsクライアントにロードされるfileがあります。そのファイルには、他の JavaScript ファイルから関数を呼び出すコードがあります。私の試みは使用することでした

var m = require('./messages');

messages.js(サーバー側で行うのと同じように)の内容をロードし、後でそのファイルから関数を呼び出すために。ただし、requireはクライアント側で定義されておらず、形式のエラーをスローしますUncaught ReferenceError: require is not defined

Web ページのヘッダーにリンクを配置するため、これらの他の JavaScript ファイルも実行時にクライアントに読み込まれます。したがって、クライアントは、これらの他のファイルからエクスポートされるすべての関数を認識します。

サーバーへのソケットを開くmessages.jsメイン ファイル内の他の JavaScript ファイル ( など) からこれらの関数を呼び出すにはどうすればよいですか?client.js

4

11 に答える 11

542

これはrequire()、ブラウザ/クライアント側の JavaScript に が存在しないためです。

ここで、クライアント側の JavaScript スクリプトの管理についていくつかの選択を行う必要があります。

次の 3 つのオプションがあります。

  1. <script>タグを使用します。
  2. CommonJS実装を使用します。Node.js のような同期依存関係があります。
  3. 非同期モジュール定義(AMD) 実装を使用します。

CommonJSクライアント側の実装には以下が含まれます (ほとんどの場合、デプロイする前にビルド手順が必要です)。

  1. Browserify - ブラウザーでほとんどの Node.js モジュールを使用できます。これは私の個人的なお気に入りです。
  2. Webpack - すべてを行います (JavaScript コード、CSS などをバンドルします)。React の急増によって普及しましたが、学習曲線が難しいことで有名です。
  3. ロールアップ- 新しい候補。ES6 モジュールを活用し、ツリー シェイキング機能が含まれています (未使用のコードを削除します)。

Browserify と (非推奨) Componentの比較について詳しく読むことができます。

AMD の実装には以下が含まれます。

  1. RequireJS - クライアント側の JavaScript 開発者の間で非常に人気があります. 非同期の性質のため、私の好みではありません。

どちらを使用するかを選択するための検索では、 Bowerについて読むことに注意してください。Bower はパッケージの依存関係のみを対象としており、CommonJS や AMD などのモジュール定義については意見がありません。

于 2013-09-27T20:48:28.627 に答える
3
window = new BrowserWindow({
    webPreferences: {
        nodeIntegration: true,
        contextIsolation: false
    }
});
于 2021-03-29T12:37:25.223 に答える
1

私が確認する。追加する必要があります:

webPreferences: {
    nodeIntegration: true
}

例えば:

mainWindow = new BrowserWindow({webPreferences: {
    nodeIntegration: true
}});

私にとって、問題はそれで解決されました。

于 2020-10-31T20:00:10.677 に答える