[英]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
)的工作方式不同。 因此,編寫一個可以在兩個應用程序中運行的模塊真的很難。
有很多庫可以解決這個問題,比如RequireJS和Browserify 。
但我對你的問題有兩個更簡單的建議。
第一個是使用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.