标签: google-closure-compiler

如何将Google Closure Compiler集成为Visual Studio 2010中的构建步骤

是否有任何参考或教程?如果可能,只有在修改文件时才建立javascript文件.

visual-studio-2010 google-closure-compiler

7
推荐指数
1
解决办法
3038
查看次数

我可以告诉Closure编译器,仅针对特定类型,停止重命名属性吗?

这个问题如下:为什么Closure编译器重命名extern类型的属性? 约翰对这个问题的回答提出了第二个问题.

如果我按照建议声明extern类型:

/** @interface */
function SpanishNoun() {}
/** @type {string} */
SpanishNoun.prototype.english;
/** @type {string} */
SpanishNoun.prototype.spanish;
Run Code Online (Sandbox Code Playgroud)

那么Javascript就像:

/**
 * @param {SpanishNoun} n 
 */
exp.foo = function (n) {
    console.log(n.english, n.spanish, n['english'], n['spanish']);  
}
Run Code Online (Sandbox Code Playgroud)

将根据需要编译为:

function(a){console.log(a.english,a.spanish,a.english,a.spanish)};
Run Code Online (Sandbox Code Playgroud)

这些属性不会像往常一样重命名.如果没有extern声明,编译后的代码将如下所示:

function(a){console.log(a.a,a.c,a.english,a.spanish)
Run Code Online (Sandbox Code Playgroud)

这一切都很好.问题是编译器已经停止在所有地方重命名'english'和'spanish' .即使他们不是外部类型.

/**
 * @param {AnotherType}  
 */
exp.bar = function (c) {
    c.other = c.english;
}
Run Code Online (Sandbox Code Playgroud)

编译成......

function(a){a.b=a.english};
Run Code Online (Sandbox Code Playgroud)

有办法阻止这个吗?如果没有,是否有这种行为的原因?

我想使用extern类型来处理源自服务器但没有重命名属性的JSON对象.但是,如果每次我声明一个extern,我正在扼杀编译器重命名和缩小代码的能力,我会找到另一种方式.也许我将采用编译器(--property_map_output_file)生成的属性重命名映射,并在生成JSON响应时在服务器上使用它.

javascript google-closure-compiler

7
推荐指数
1
解决办法
1629
查看次数

Google Closure Linter无法在Sublime Text 2 for Windows中使用

有没有人得到Google Closure Linter(gjslint)与Sublime Text 2 for Windows一起使用?

当我运行它时,我得到以下内容(通过工具菜单或CTRL + SHIFT + J):

文件名,目录名或卷标语法不正确.

closure linter:忽略0错误.

我的步骤如下:

开箱即用,没有任何功能.但是,如果我在默认设置中对路径进行硬编码,我可以使用fixjsstyle插件:

{
    // Path to the gjslint.
    "gjslint_path": "/python27/scripts/gjslint",

    // Path to the fixjsstyle.
    "fixjsstyle_path": "/python27/scripts/fixjsstyle"
}
Run Code Online (Sandbox Code Playgroud)

可以确认它们都存在:

C:\>dir c:\python27\scripts
 Volume in drive C is OSDisk
 Volume Serial Number is 36E3-7433

 Directory of c:\python27\scripts

...
06/29/2012  09:48 AM               304 fixjsstyle-script.py
06/29/2012  09:48 AM             7,168 fixjsstyle.exe
06/29/2012  09:48 AM …
Run Code Online (Sandbox Code Playgroud)

javascript python google-closure-compiler sublimetext2

7
推荐指数
1
解决办法
2316
查看次数

使用闭合编译器删除console.log

我想通过剥离所有console.log("blah blah")调试语句来使我的JS代码生产准备就绪.我很困惑这个流行的SO答案(下面的代码)如何使用谷歌的闭包编译器,一个流行的JS minifier /编译器来做到这一点.

/** @const */
var LOG = false;
...
LOG && log('hello world !'); // compiler will remove this line
...

//this will even work with `SIMPLE_OPTIMALIZATIONS` and no `--define=` is necessary !
Run Code Online (Sandbox Code Playgroud)

两个问题:

  1. 倍数文件:上述代码如何处理多个文件(下面的基本示例)?它必须处于关闭状态,对吧?这不是意味着您必须在每个页面上放置此代码吗?此外,不也那么意味着你必须改变所有你想要的是全球性的,从变量var foo='bar'var window.foo='bar';每个页面上这些盖子里面?

  2. 小问题:它不应该是console.log('...'),而不是log('...')因为log()给出了一个错误?我错过了一些明显的东西吗?

<script src='/assets/js/file1.js'></script> <script src='/assets/js/file2.js'></script>

file1.js的内容:

var foo='bar';
console.log("foo"+foo);
Run Code Online (Sandbox Code Playgroud)

file2.js的内容

var baz='bazzy';
console.log("baz"+baz);
Run Code Online (Sandbox Code Playgroud)

javascript debugging closures global-variables google-closure-compiler

7
推荐指数
1
解决办法
2870
查看次数

是否有可能使Google Closure编译器*不*内联某些函数?

关闭编译器内联函数,但代码尺寸更小,如果该功能没有内联(我只关心代码的大小-这是JS1k).我可以告诉编译器我不希望内联函数吗?

编辑:只是为了解释一下,这是我的功能:

function lineTo(x,y) {
  a.lineTo(x,y);
}
Run Code Online (Sandbox Code Playgroud)

其中,a在画布背景.因为a.lineTo代码中有很多s,所以使用这个函数是值得的.像这样,我的代码是1019个字节(并且所有lineTos都被替换a.lineTo).如果我将功能更改为:

function lineTo(x,y) {
  a.lineTo(x,y);
  console.log();
}
Run Code Online (Sandbox Code Playgroud)

新行以某种方式强制编译器不内联此函数,这给了我993字节.所以,如果我能摆脱,console.log();我将另外保存14个字节.

javascript google-closure-compiler js1k

6
推荐指数
1
解决办法
1780
查看次数

@private注释在Google Closure JavaScript代码中实际做了什么?

当我在我的变量或函数上面添加注释时,@private它实际上在做什么?我查看了文档,但我仍然不确定.

goog.provide('myproject');

/** @private */
myproject.foo = "bar";
Run Code Online (Sandbox Code Playgroud)

当我打开chrome的开发工具(myproject.foo)时,我仍然可以访问它.和...

goog.require('myproject');

window.addEventListener('load', function() {
    //this works.
    document.body.textContent = myproject.foo;
});
Run Code Online (Sandbox Code Playgroud)

即使在编译时,上面的代码仍将body的bodyContent设置为等于"bar".那@private实际上做了什么?

javascript annotations google-closure google-closure-library google-closure-compiler

6
推荐指数
1
解决办法
1926
查看次数

Closure Compiler可以构建CommonJS模块

我想使用Google Closure Compiler构建一组CommonJS模块.这可以开箱即用吗?或者,是否可以对CommonJS模块进行一些简单的转换,以允许Closure Compiler使用它们?

javascript build-process google-closure-compiler commonjs

6
推荐指数
1
解决办法
4820
查看次数

Google Closure Annotating不会告诉我我错了

我正在尝试使用Google Closure,特别是用于强制类型安全的注释内容.为了测试我做错了什么,虽然编译器不会告诉我它是......

这是代码:

// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level SIMPLE_OPTIMIZATIONS
// ==/ClosureCompiler==

/**
 * A card.
 * @constructor
 * @param {String} cardName The exact name of the card
 * @param {Kinetic.Layer} layer The layer for the card
 */
function CardObject(cardName, layer)
{
    /** @type {Number} */
    var number = cardName;
}
Run Code Online (Sandbox Code Playgroud)

所以,我有一个变量number,我说是一个Number,我尝试为它分配一个字符串.这不应该是可能的,对吗?虽然编译器不会告诉我......

为什么不告诉我这是错的?

javascript compiler-warnings google-closure google-closure-compiler

6
推荐指数
1
解决办法
911
查看次数

将JS嵌入到.html文件中

我有一个嵌入了javascript代码的HTML文件,这是一个简单的例子:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script type=”text/javascript”>
    // javascript code 
    </script>
</head>
<body>
<!-- some html -->
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

获取相同文件的最简单方法是将所有JS片段缩小到其中?

HTML文件可以是任意复杂的并且具有多个脚本片段.由于多种原因,我不需要在生成的html中将js拆分为单独的.js文件.

我们使用闭包编译器并在项目中使用grunt.

html javascript minify google-closure-compiler

6
推荐指数
1
解决办法
2262
查看次数

我应该多次运行Google Closure Compiler以更多地优化我的代码吗?

我尝试在高级优化模式下将以下JavaScript代码放入Closure Compiler Web界面:

function f(some_object) {
  if (some_object.foo == 1) {
    console.log(some_object.bar);
  } else {
    alert(some_object.bar);
  }
}

var my_object = {foo: 1, bar: 2};
f(my_object);
Run Code Online (Sandbox Code Playgroud)

它生成了以下编译代码:

var a = {b:1, a:2};
1 == a.b ? console.log(a.a) : alert(a.a);
Run Code Online (Sandbox Code Playgroud)

但是,当我将编译后的代码放回Closure Compiler时,它设法生成了更短的版本:

console.log(2);
Run Code Online (Sandbox Code Playgroud)

这是否意味着我应该在我的代码上多次运行Closure Compiler以确保我能够获得最佳的优化?这样做有什么潜在的问题吗?

javascript google-closure-compiler

6
推荐指数
1
解决办法
81
查看次数