1

我正在开始我的第一个大型 javascript 项目!我有一个关于部署的问题。我正在使用对 Web 服务的 ajax 调用。为了进行设置,我有一个静态 JS 文件,其代码如下:

var API_URL_ROOT = 'http://api.example.com/';

var IN_DEVELOPMENT = True;
if (IN_DEVELOPMENT) {
  API_URL_ROOT = 'http://localhost.com/api';
}

$.get(API_URL_ROOT)

我正在使用 python/fabric 进行部署。 我想知道是否有任何预构建的工具来处理 javascript 文件的静态分析/操作。, 现在它留给提交者来切换

我正在计划一个部署过程,例如:

  1. 发出部署命令
  2. “构建” JS,通过将所有值设置为生产值(即。IN_DEVELOPMENT = False
  3. 缩小 JS
  4. 将代码部署到生产服务器

我正在考虑只使用 sed 或其他东西来进行IN_DEVELPMENT = False替换。我查看了一些流行的缩小工具,但似乎没有一个提供这种功能。

我认为这对于应用程序来说是一个非常常见的问题。一般是怎么处理的?任何帮助,将不胜感激。谢谢

我最近从 Mozilla 阅读了一篇关于hackernews 的文章:

在 Mozilla Persona 代码库中,我们经常将难以测试的私有函数暴露给公共接口,清楚地将额外的函数标记为测试 API 的一部分。虽然其他开发者仍然可以调用这些私有函数,但作者的意图很明确。

...
publicFunction: function() {
  return "publicFunction can be invoked externally but " 
             + privateFunction();
}

// BEGIN TESTING API
,
privateFunction: privateFunction
// END TESTING API
};

// privateFunction is now accessible via the TESTING API
function privateFunction() {
...

可以在构建过程中删除 // BEGIN TESTING API 和 //END TESTING API 伪标记之间的代码以用于生产。

所以其他公司肯定也在这样做。是否有预制工具来促进可以删除此代码的 JS 构建过程?我在 github 上浏览了他们的一些项目,但没有看到任何项目。谢谢

4

1 回答 1

3

我们正在使用道场

在 dojo 中,您可以对 js 的构建版本使用条件排除,以排除您在构建 js 中不需要的部分代码。希望这可以帮助。

例如:

var API_URL_ROOT = 'http://api.example.com/';

//>>excludeStart("dev",!pragmas.dev);
    var IN_DEVELOPMENT = True;
//>>excludeEnd("dev");

if (IN_DEVELOPMENT) {
  API_URL_ROOT = 'http://localhost.com/api';
}

$.get(API_URL_ROOT)
于 2013-02-06T17:45:26.867 回答