簡體   English   中英

使用node.js和CoffeeScript訪問全局變量

[英]Accessing global variables with node.js and CoffeeScript

我正在嘗試為我正在使用Node.js和CoffeeScript編寫的應用程序聲明全局變量。 所以我在一個公共文件中聲明它,它在編譯后連接到兩個應用程序。 在那個文件中我有例如:

root = exports ? this
root.myVariable = 300

所以我的第一個應用程序是HTML。 當我嘗試訪問此變量時,例如

console.log myVariable

它沒有問題。 但我的其他應用程序是由node命令啟動的服務器應用程序,我無法訪問該應用程序中的該變量。 我試過了:

console.log root.myVariable
console.log myVariable

第一行我打印'未定義'(所以它看起來定義了root),而第二行,我得到ReferenceError - myVariable是未定義的。

那么我該如何訪問這個變量呢?

這是我得到的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);

你很親密,但你需要稍微改變一下

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

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

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

# lib/db.coffee
dbconfig = require("../config").db

客戶端和服務器JavaScript (或CoffeeScript )的工作方式不同。 因此,編寫一個可以在兩個應用程序中運行的模塊真的很難。

有很多庫可以解決這個問題,比如RequireJSBrowserify

但我對你的問題有兩個更簡單的建議。


第一個是使用JSON來存儲全局常量。 在服務器端,您只require JSON文件:

root = require './config.json'

在客戶端,您可以手動解析它,也可以將其作為pjson


我的第二個建議是編寫一個非常簡單的模塊,它將與你的兩個應用程序兼容。 它看起來像這樣:

root = 
  myVariable: 300
  myOtherVariable: 400

modulte.exports = root if module?.parent?

此代碼應與node.js require函數和browser <script>標記兼容。

更新:

我只是重讀了你的問題並意識到,你幾乎按照我的建議做了。 但是你的代碼看起來很好。 您可以嘗試使用module.export而不是其別名exports ,它可能會有所幫助:

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

但是,正如我所說,你的代碼對我來說也很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM