ElectronJs:在json包中,花括号“{}”意味着什么

时间:2016-05-16 08:48:26

标签: json npm electron package.json

我正在浏览一些电子包.json示例,其中我发现了一些interpolations,如下所示:

"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. & {{}}
  4. "{{& SENTRY_DSN_PRIVATE }}"的含义

    如果有人能够解释那么它会非常友好。非常感谢。

1 个答案:

答案 0 :(得分:2)

我猜你在谈论Whatsie及其package.json

如果您查看文件tasks/compile.coffee中的一个Gulp任务,您就可以看到这些行(在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中,您还可以找到一行:

  

你也可以使用& unescape变量:{{&名称}}

因此{{& name}}是为了防止值被转义。否则,如果您不使用&并且输出值具有一些危险字符,则它们将被更安全的字符替换(最初是为了防止模板中的XSS),因此它将转换初始值,这并不总是你想要的。在这种情况下,作者希望保留原始值。

返回process.env - 它是一个对象,可以访问Node.JS中的environment variables。存储库.env-example中有一个文件,其中包含开发人员必须设置的env变量的示例,以使应用程序在不同的环境中以不同的方式工作(例如在本地计算机或CI服务器上)。此文件中某些变量的名称是package.json中用作模板占位符的变量 - 我想应用程序的作者使用所有这些来简化不同环境的构建过程。