使用grunt在javascript文件中“嵌入”一个全局变量

时间:2015-01-22 07:14:17

标签: javascript gruntjs

我的项目中有一个.js文件,其代码如下:

var API_ENDPOINT = 'http://example.com:8000';
var api = new RemoteApi(API_ENDPOINT);

其中API_ENDPOINT在dev / prod环境中发生变化

它不是一个js应用程序,主要是一个经典的服务器端应用程序(Django),有一些客户端的内容。

我开始使用Grunt来管理客户端依赖关系和想法,在Grunt配置中指定API_ENDPOINT并以某种方式"嵌入"是个好主意。它进入.js文件。

但是我找不到用Grunt破坏文件的方法。

生成的.js文件将在浏览器envorenment中运行,因此我需要在source.js文件中嵌入我的API_ENDPOINT变量或创建一个单独的.js文件,如

var API_ENDPOINT = '...';

我将在script.js

之前加入

(另外,我希望"将这个变量嵌入我的django' s settings.py

1 个答案:

答案 0 :(得分:6)

对于客户端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);

<强> Gruntfile

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 section
  • 来做
  • 不知道如何解析python中的json-config,但它不应该很难......