使用 grunt 在 javascript 文件中“嵌入”一个全局变量
"Embed" a global variable in javascript file using grunt
我的项目中有一个.js文件,其中包含这样的代码:
var API_ENDPOINT = 'http://example.com:8000';
var api = new RemoteApi(API_ENDPOINT);
开发/生产环境之间的API_ENDPOINT
变化
它不是一个js应用程序,主要是一个经典的服务器端应用程序(Django),有一些客户端增强功能。
我开始使用 Grunt 来管理客户端依赖项,并认为在 Grunt 配置中指定API_ENDPOINT
并以某种方式将其"嵌入".js是个好主意。
但是我找不到用 Grunt 破坏文件的方法。
生成的.js文件将在浏览器环境中运行,所以我需要将我的API_ENDPOINT
变量嵌入在 source.js 文件中或创建一个单独的.js文件,例如
var API_ENDPOINT = '...';
我将在脚本之前包含.js
(另外,我想将这个变量"嵌入"到我的 django settings.py
中)
对于客户端JS,我会将所有配置提取到一个config.json
文件中,并使用grunt-replace 将注入到您的代码中。
文件夹结构可能如下所示:
- Gruntfile
- config.json
- client/
- src/
- script.js
- dist/
config.json
{
"API_ENDPOINT": "http://example.com:8000"
}
src/script.js
var API_ENDPOINT = '@@API_ENDPOINT'; // everything starting with @@ will be replaced by grunt-replace by default
var api = new RemoteApi(API_ENDPOINT);
咕噜咕噜的文件
grunt.initConfig({
replace: {
dist: {
options: {
patterns: [{
json: require('config.json')
}]
},
files: [
{expand: true, flatten: true, src: ['./client/src/*.js'], dest: './client/dist/'}
]
}
}
});
一些细节:
- 您的最终客户端代码将驻留在
client/dist
- 需要 JSON 文件将自动解析它
- 当然,你可以用 yaml/cson 来做(参见 grunt-replace 部分)
- 不知道如何在 Python 中解析 JSON 配置,但这应该不难......
相关文章:
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 保留 JQuery Vars 用于另一个函数(全局变量?)
- 要求JS'ing一个没有全局$变量的jQuery插件
- 给我的浏览器一个可通过javascript访问的全局变量
- 使用 grunt 在 javascript 文件中“嵌入”一个全局变量
- HTML元素在JavaScript中表示为一个全局变量,How
- 这是一个全局变量吗?
- CoffeeScript 在 'for v in values' 中创建一个全局变量 'v',导致事件中的错误引用
- 在 Jquery 中为语言切换器分配一个全局变量
- 从函数内部声明一个全局变量
- 在 TypeScript 中使用外部模块声明一个全局变量
- 将全局变量传递给另一个视图主干
- 我是否正在创建一个全局变量
- 为什么我已经定义的全局变量被IE8中的另一个var语句覆盖
- 将 React 模板放在一个全局变量的属性中
- 如何在另一个函数中访问 JavaScript 自定义全局变量
- 如何将值从一个函数传递到另一个具有对象的函数,而无需在 JS 中声明全局变量
- 如何在不声明全局变量的情况下将值从一个函数传递到另一个函数?
- 存储nodejs fs.readfile's产生一个变量并传递给全局变量