2016-05-16 55 views
3

我會通過一些電子的package.json例子,我發現了一些interpolations如下所示:ElectronJs:這是什麼花括號「{}」意味着包JSON

"updater": { 
    "urls": { 
     "darwin": "{{& SQUIRREL_UPDATES_URL }}/update/%CHANNEL%/darwin?version=%CURRENT_VERSION%", 
     "win32": "{{& SQUIRREL_UPDATES_URL }}/update/%CHANNEL%/win32", 
     "linux": "{{& SQUIRREL_UPDATES_URL }}/update/%CHANNEL%/linux" 
    } 
    } 

    "piwik": { 
    "serverUrl": "{{& PIWIK_SERVER_URL }}" 
    }, 
    "sentry": { 
    "dsn": "{{& SENTRY_DSN_PRIVATE }}" 
    } 

我真的不知道以下:

  1. 請問這個{{}}在JSON意味着
  2. 哪裏,這些變量存在
  3. 什麼&意味着{{}}"{{& SENTRY_DSN_PRIVATE }}"

如果任何人都可以解釋,那麼它會真的很友善。很多人提前感謝。

回答

2

我想你說的是Whatsie,它是package.json

如果你看一看位於文件tasks/compile.coffee在咕嘟咕嘟任務之一,你就可以看到線(在CoffeeScript中):被傳遞給

# Move package.json 
gulp.task 'compile:' + dist + ':package', ['clean:build:' + dist], -> 
    gulp.src './src/package.json' 
    .pipe mustache process.env 
    .pipe gulp.dest dir 

這裏實際package.json一個mustache模板引擎 - 它接收一個模板作爲第一個參數(這裏的package.json就像一個模板)以及作爲第二個參數在模板中插入的數據 - process.env

由於package.json的作用類似於mustache的模板,因此可以使用mustache語法。 大括號{{}}是它的一部分,當模板被編譯時,它們被用作佔位符,這些佔位符將被實際數據取代。在mustache docs您還可以找到一條線:

您還可以使用&反轉義變量:{{&名}}

所以{{& name}}是爲了防止被轉義值。否則,如果您不使用&,並且輸出的值具有某些危險字符,則它們將被更安全的字符替換(最初用於防止模板中的XSS),因此它將轉換初始值,而這並不總是您想。在這種情況下,作者想保留原始價值。

回到process.env - 它是一個對象,它可以訪問Node.JS中的environment variables。存儲庫.env-example中有一個文件,開發人員必須設置一個env變量示例,以便讓應用程序在不同環境(例如本地機器或CI服務器)中以不同的方式工作。這個文件中一些變量的名稱是在package.json中作爲模板佔位符使用的名稱 - 我猜應用的作者使用所有這些來簡化不同環境的構建過程。