是否有任何参考或教程?如果可能,只有在修改文件时才建立javascript文件.
这个问题如下:为什么Closure编译器重命名extern类型的属性? 约翰对这个问题的回答提出了第二个问题.
如果我按照建议声明extern类型:
/** @interface */
function SpanishNoun() {}
/** @type {string} */
SpanishNoun.prototype.english;
/** @type {string} */
SpanishNoun.prototype.spanish;
那么Javascript就像:
/**
 * @param {SpanishNoun} n 
 */
exp.foo = function (n) {
    console.log(n.english, n.spanish, n['english'], n['spanish']);  
}
将根据需要编译为:
function(a){console.log(a.english,a.spanish,a.english,a.spanish)};
这些属性不会像往常一样重命名.如果没有extern声明,编译后的代码将如下所示:
function(a){console.log(a.a,a.c,a.english,a.spanish)
这一切都很好.问题是编译器已经停止在所有地方重命名'english'和'spanish' .即使他们不是外部类型.
/**
 * @param {AnotherType}  
 */
exp.bar = function (c) {
    c.other = c.english;
}
编译成......
function(a){a.b=a.english};
有办法阻止这个吗?如果没有,是否有这种行为的原因?
我想使用extern类型来处理源自服务器但没有重命名属性的JSON对象.但是,如果每次我声明一个extern,我正在扼杀编译器重命名和缩小代码的能力,我会找到另一种方式.也许我将采用编译器(--property_map_output_file)生成的属性重命名映射,并在生成JSON响应时在服务器上使用它.
有没有人得到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"
}
可以确认它们都存在:
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 …我想通过剥离所有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 !
两个问题:
倍数文件:上述代码如何处理多个文件(下面的基本示例)?它必须处于关闭状态,对吧?这不是意味着您必须在每个页面上放置此代码吗?此外,不也那么意味着你必须改变所有你想要的是全球性的,从变量var foo='bar'到var window.foo='bar';每个页面上这些盖子里面?
小问题:它不应该是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);
file2.js的内容
var baz='bazzy';
console.log("baz"+baz);
javascript debugging closures global-variables google-closure-compiler
关闭编译器内联函数,但代码尺寸更小,如果该功能没有内联(我只关心代码的大小-这是JS1k).我可以告诉编译器我不希望内联函数吗?
编辑:只是为了解释一下,这是我的功能:
function lineTo(x,y) {
  a.lineTo(x,y);
}
其中,a在画布背景.因为a.lineTo代码中有很多s,所以使用这个函数是值得的.像这样,我的代码是1019个字节(并且所有lineTos都被替换a.lineTo).如果我将功能更改为:
function lineTo(x,y) {
  a.lineTo(x,y);
  console.log();
}
新行以某种方式强制编译器不内联此函数,这给了我993字节.所以,如果我能摆脱,console.log();我将另外保存14个字节.
当我在我的变量或函数上面添加注释时,@private它实际上在做什么?我查看了文档,但我仍然不确定.
goog.provide('myproject');
/** @private */
myproject.foo = "bar";
当我打开chrome的开发工具(myproject.foo)时,我仍然可以访问它.和...
goog.require('myproject');
window.addEventListener('load', function() {
    //this works.
    document.body.textContent = myproject.foo;
});
即使在编译时,上面的代码仍将body的bodyContent设置为等于"bar".那@private实际上做了什么?
javascript annotations google-closure google-closure-library google-closure-compiler
我想使用Google Closure Compiler构建一组CommonJS模块.这可以开箱即用吗?或者,是否可以对CommonJS模块进行一些简单的转换,以允许Closure Compiler使用它们?
我正在尝试使用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;
}
所以,我有一个变量number,我说是一个Number,我尝试为它分配一个字符串.这不应该是可能的,对吗?虽然编译器不会告诉我......
为什么不告诉我这是错的?
javascript compiler-warnings google-closure google-closure-compiler
我有一个嵌入了javascript代码的HTML文件,这是一个简单的例子:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script type=”text/javascript”>
    // javascript code 
    </script>
</head>
<body>
<!-- some html -->
</body>
</html>
获取相同文件的最简单方法是将所有JS片段缩小到其中?
HTML文件可以是任意复杂的并且具有多个脚本片段.由于多种原因,我不需要在生成的html中将js拆分为单独的.js文件.
我们使用闭包编译器并在项目中使用grunt.
我尝试在高级优化模式下将以下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);
它生成了以下编译代码:
var a = {b:1, a:2};
1 == a.b ? console.log(a.a) : alert(a.a);
但是,当我将编译后的代码放回Closure Compiler时,它设法生成了更短的版本:
console.log(2);
这是否意味着我应该在我的代码上多次运行Closure Compiler以确保我能够获得最佳的优化?这样做有什么潜在的问题吗?
javascript ×9
annotations ×1
closures ×1
commonjs ×1
debugging ×1
html ×1
js1k ×1
minify ×1
python ×1
sublimetext2 ×1