0

Node.js と CoffeeScript を使用して作成しているアプリケーションのグローバル変数を宣言しようとしています。そのため、コンパイル後に両方のアプリケーションに連結される共通ファイルで宣言しています。そのファイルには、たとえば次のものがあります。

root = exports ? this
root.myVariable = 300

私の最初のアプリケーションは HTML です。たとえば、この変数にアクセスしようとすると

console.log myVariable

問題ありません。しかし、私の他のアプリケーションは node コマンドによって起動されたサーバー アプリケーションであり、そのアプリケーションでその変数にアクセスできません。私は試した:

console.log root.myVariable
console.log myVariable

最初の行では「undefined」が出力され(ルートが定義されているように見えます)、2 行目では ReferenceError - myVariable is undefined が表示されます。

では、どうすればこの変数にアクセスできますか?

これが私が得たJavascriptの出力コードです。役に立つかもしれません:

(function() {
  var root, _ref;

  root = (_ref = typeof module !== "undefined" && module !== null ? module.exports : void 0) != null ? _ref : this;

  root.myVariable = 300;

}).call(this);

(function() {

  console.log(root.myVariable);

  console.log(myVariable);

}).call(this);
4

2 に答える 2

2

あなたは近くにいますが、物事を少しだけ変える必要があります

# config.coffee
module.exports =
  foo: "bar"
  hello: "world"
  db:
    user: alice
    pass: password1

# lib/a.coffee
config = require "../config"

# lib/b.coffee
config = require "../config"

# lib/db.coffee
dbconfig = require("../config").db
于 2013-03-19T15:29:24.930 に答える
0

クライアントとサーバーJavaScript(またはCoffeeScript) の動作は異なります。したがって、両方のアプリケーションで動作するモジュールを作成するのは非常に困難です。

RequireJSBrowserifyなど、この問題を解決するライブラリはたくさんあります。

しかし、あなたの問題に対して 2 つの簡単な提案があります。


1 つ目はJSON、グローバル定数を格納するために使用することです。サーバー側では、次のように簡単requireJSONファイルできます。

root = require './config.json'

クライアント側では、手動で解析するか、pjson.


2 番目の提案は、両方のアプリケーションと互換性のある非常に単純なモジュールを作成することです。次のようになります。

root = 
  myVariable: 300
  myOtherVariable: 400

modulte.exports = root if module?.parent?

node.js requireこのコードは、関数とブラウザー<script>タグの両方と互換性がある必要があります。

アップデート:

私はちょうどあなたの質問を読み直して、私が提案したようにあなたがしたことに気づきました。しかし、あなたのコードは私にはうまく見えます。module.exportalias の代わりに使用してみてくださいexports。役立つ場合があります。

root = modulte?.exports ? this
root.myVariable = 300

しかし、私が言ったように、あなたのコードも私にはうまく見えます。

于 2013-03-19T11:39:03.073 に答える