web-dev-qa-db-ja.com

requireは定義されていませんか? Node.js

Node.jsの使用を開始しました。 app/jsファイルでは、次のようなことをしています:

app.js

var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Am I really running a server?!');
}).listen(8080, '127.0.0.1');

console.log('running server!');

ターミナルでnode app.jsを実行すると、コンソールは'running server!'を吐き出しますが、ブラウザではUncaught ReferenceError: require is not definedを取得します。

ターミナルではなぜ機能するのか、ブラウザでは機能しないのか、誰かが私に説明できますか?

ノードのhttp-serverを使用してページを提供しています。

36
Richard Bustos

ターミナルでは、ノードアプリケーションを実行しており、スクリプトを実行しています。これは、ブラウザでスクリプトを直接実行するのとは非常に異なる実行環境です。 Javascript言語はほぼ同じですが(Chromeブラウザーを実行している場合は両方ともV8)、使用可能なライブラリなどの実行環境の残りは同じではありません。

node.jsは、V8 Javascriptエンジンとサーバー側ライブラリの束を組み合わせたサーバー側Javascript実行環境です。 require()は、node.jsが環境に追加する機能の1つです。したがって、ターミナルでノードを実行すると、require()を含む環境が実行されます。

require()は、ブラウザに組み込まれている機能ではありません。これは、ブラウザではなく、node.jsの特定の機能です。したがって、ブラウザにスクリプトを実行させようとしても、require()はありません。

一部の形式のnode.jsコードをブラウザーで実行する方法があります(すべてではありません)。たとえば、require()に代わるブラウザの代替品を取得できますが、これらは同様に機能します(ただし同一ではありません)。

ただし、ブラウザでWebサーバーを実行することはできません。これは、ブラウザが実行できる機能ではないためです。


興味があるかもしれません browserify ブラウザでrequire()ステートメントを使用してノードスタイルのモジュールを使用できます。

43
jfriend00

Node.JSはserver-sideテクノロジーであり、ブラウザーテクノロジーではありません。したがって、require()などのノード固有の呼び出しは、ブラウザーでは機能しません。

Nodeからブラウザ固有のモジュールを提供する場合は、 browserify または webpack を参照してください。

57
Rob Raisch