我正在浏览一些电子包.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 }}"
}
我真的不知道以下内容:
&
{{}}
"{{& SENTRY_DSN_PRIVATE }}"
的含义
醇>
如果有人能够解释那么它会非常友好。非常感谢。
答案 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中用作模板占位符的变量 - 我想应用程序的作者使用所有这些来简化不同环境的构建过程。