标签: google-closure-compiler

如何告诉闭包编译器保留对象的属性

我有一个这样声明的对象:

my.namespace.FEATURES = {
    FIRST_FEATURE = "first feature",
    SECOND_FEATURE = "second feature"
};
Run Code Online (Sandbox Code Playgroud)

my.namespace.my.object用来跟踪我的代码中可用/实现的功能类型。每个新发布的版本都会有一组经过修改的功能。使用我的最小化代码的第三方会想知道他们在他们拥有的版本中可以做什么,所以我提供了以下导出的函数,以便他们知道他们可以做什么。

my.namespace.hasFeature = function(feature) {
    for(var prop in my.namespace.FEATURES) {
        if(my.namespace.FEATURES[prop] == feature) {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

问题是当我运行 Closure Compiler 时属性被重命名。

我的问题是:保留这些属性的最佳方法是什么?我知道我可以导出该属性,但由于某种原因感觉有点脏。是否有 Closure 最佳实践来保留对象的属性?

google-closure-compiler

2
推荐指数
1
解决办法
4288
查看次数

Google Closure Compiler如何处理引号(字符串文字)?

问题'Google Closure Compiler如何处理引号(字符串文字)?' 也可以重新措辞如下:

  • 为什么Closure用双引号替换/交换单引号?
  • Closure如何决定使用什么引用格式/样式?
  • (如何)我可以更改此(默认)行为?

注1:这个问题不是关于为什么Closure(或其他一些缩小词)选择更喜欢双引号(如这里这里所要求的).

注2:这个问题不是关于单引号和双引号的讨论,但是有些人理解GCC对我们的代码做什么(以及为什么)是非常有用的!

javascript quotes options google-closure-compiler

2
推荐指数
1
解决办法
803
查看次数

如何包含谷歌关闭的依赖项

我运行非常基本的文件:

goog.provide('test');

goog.require('goog.net.XhrIo');
goog.require('goog.json.Serializer');
goog.require('goog.dom');
goog.require('goog.ui.HoverCard');
goog.require('goog.positioning');
goog.require('goog.dom.dataset');
Run Code Online (Sandbox Code Playgroud)

但我明白了

test.js:3: ERROR - required "goog.net.XhrIo" namespace never provided
goog.require('goog.net.XhrIo');
Run Code Online (Sandbox Code Playgroud)

在编译时

java -d32 -client -jar compiler/compiler.jar --js compiler/closure-library/closure/goog/base.js --js test.js --warning_level=VERBOSE
Run Code Online (Sandbox Code Playgroud)

如何找到goog库?

编辑:

我也尝试使用在线版:http://closure-compiler.appspot.com/home并仍然获得:

    JSC_MISSING_PROVIDE_ERROR: required "goog.net.XhrIo" namespace never provided at line 3 character 0 in test.js
goog.require('goog.net.XhrIo');
^
JSC_MISSING_PROVIDE_ERROR: required "goog.json.Serializer" namespace never provided at line 4 character 0 in test.js
goog.require('goog.json.Serializer');
^
JSC_MISSING_PROVIDE_ERROR: required "goog.dom" namespace never provided at line 5 character 0 in test.js
goog.require('goog.dom'); …
Run Code Online (Sandbox Code Playgroud)

google-closure google-closure-library google-closure-compiler

2
推荐指数
1
解决办法
2056
查看次数

进行中的感叹号对 JSDoc @type 标签有什么作用?

VS Code 解析以下内容,就好像没有感叹号一样,没有任何错误:

const el = /** @type {HTMLElement!} */ (document.getElementById("abc"));
Run Code Online (Sandbox Code Playgroud)

它有什么作用?官方 JSDoc 文档仅说明了前面的标记

表示该值属于指定类型,但不能为空。

不确定后续标记的作用。

javascript google-closure-compiler jsdoc visual-studio-code

2
推荐指数
1
解决办法
1773
查看次数

Google Closure Compiler:程序访问问题

我试图以编程方式访问Closure Compiler工具,但是在PHP和JavaScript方面都存在问题.这是一个快速而肮脏的PHP脚本,我只是为了解决编译器的REST API:

<?php
if (!empty($_POST)) {
echo '<pre>';
print_r($_POST);
echo '</pre><br />';
  foreach ($_POST as $k => &$v) $v = urlencode($v);
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
  curl_setopt($ch, CURLOPT_URL, 'http://closure-compiler.appspot.com/compile');
  echo curl_exec($ch);
} else {
  echo "
    <html>
      <body>
        <form action='' method='post'>
          <p>Type JavaScript code to optimize here:</p>
          <textarea name='js_code' cols='50' rows='5'>
            function hello(name) {
              // Greets the user
              alert('Hello, ' + name);
            }
            hello('New user');
          </textarea>
          <input type='hidden' …
Run Code Online (Sandbox Code Playgroud)

php api jquery curl google-closure-compiler

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

使用Google Closure Compiler部分跳过部分

我正在服务器上生成一个javascript,并希望运行Google Clousure Compiler来运行脚本的php源代码.

var jsvar = <?=$var ? true : false ?>;
Run Code Online (Sandbox Code Playgroud)

如果有任何方法告诉编译器跳过优化,只是徘徊?像正则表达式跳过:

/<\?=.*?\?>/
Run Code Online (Sandbox Code Playgroud)

最好的祝福,

尼克拉斯

google-closure-compiler

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

Grails app:JS文件混淆

我想用war文件中的最小化版本(由Closure Compiler最小化 - https://developers.google.com/closure/compiler/docs/gettingstarted_app)替换js 文件.为了建立战争,我正在使用蚂蚁:

...
<target name="war" depends="buildnumber" description="--> Creates a WAR of a Grails application">
    <grails command="war" environment="${grails.env}"/>
</target>
...
Run Code Online (Sandbox Code Playgroud)

我补充说:

grails.project.resources = { stagingDir ->
    delete(file:"${stagingDir}/js/*.js")
}
Run Code Online (Sandbox Code Playgroud)

到<root>\grails-app\conf\BuildConfig.groovy但是没有删除war文件的js文件.

如何在ant构建文件中提供最小化的文件列表,以及如何将其添加到最终war文件中?

更新:

我在\ grails-app\conf\BuildConfig.groovy中添加了以下内容,将最小化的文件复制到war文件中.在第一步中,ant最小化js文件.在下一步中生成war文件,此步骤用最小化文件替换原始js文件.

grails.war.resources = { stagingDir, args ->
    def jsFiles = [
            'file1.js',
            'file2.js',
            'file3.js',
            ...
            'templates.common.js'
    ];
    for (file in jsFiles) {
        File f = new File("minimizedjs\\${file}");
        if(f.exists()) {
            copy(file: "minimizedjs\\${file}", tofile: "${stagingDir}\\js\\${file}")
        }
        else {
            println('.....!');
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ant grails war google-closure-compiler

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

不当使用"这个".在javascript中

我正在定义一个简单的对象"浏览器",它允许从列表中显示"上一个"和"下一个"图像.

function Browser(image, elements) {
    this.current = 0;
    this.image = image;
    this.elements = elements;
}
Browser.prototype.next = function () {
    if (++this.current >= this.elements.length) {
         this.current = 0;
    }
    return this.show(this.current);
};
Browser.prototype.prev = function () {
    if (--this.current < 0) {
        this.current = this.elements.length - 1;
    }
    return this.show(this.current);
};
Browser.prototype.show = function (current) {
    this.image.src = this.elements[current];
    return false;
};
Run Code Online (Sandbox Code Playgroud)

这个代码几乎被JSlint所喜欢.但是"高级优化"中的Google Closure Compiler无法编译它.

它说:

JSC_USED_GLOBAL_THIS: dangerous use of the global this object at line 3 character 0
this.current …
Run Code Online (Sandbox Code Playgroud)

javascript oop google-closure-compiler

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

Windows上的closurebuilder.py错误:"无法解码字节0x8f"

我试图在Windows上运行closurebuilder.py,无论我传递什么文件,我从Python得到同样的错误:

python goog\closure\bin\build\closurebuilder.py --root = goog/closure/goog/--root = closurebuilder-example/--namespace ="myproject.start"

goog\closure\bin\build\closurebuilder.py: Scanning paths...
Traceback (most recent call last):
  File "goog\closure\bin\build\closurebuilder.py", line 262, in <module>
    main()
  File "goog\closure\bin\build\closurebuilder.py", line 200, in main
    sources.add(_PathSource(js_path))
  File "goog\closure\bin\build\closurebuilder.py", line 175, in __init__
    super(_PathSource, self).__init__(source.GetFileContents(path))
  File "C:\Users\Chris\Code\Plain\goog\closure\bin\build\source.py", line 119, in GetFileContents
    return fileobj.read()
  File "C:\System\Python\33\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 6857: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

无论我是在尝试构建一个简单的脚本,一个空白文件,还是一些更复杂的东西,都会出现这个错误,抱怨带有字节0x8f的UnicodeDecodeError.我正在使用Visual Studio 2012来创建这些文件,并且我尝试使用其默认编码(Windows代码页1252)和UTF-8进行保存.

为了简单起见,我试图在以下网址中构建基本示例:https://developers.google.com/closure/library/docs/closurebuilder

如果页面在这里改变了我正在使用的HTML和脚本:

HTML: …

python windows utf-8 google-closure-compiler

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

使用rhino或closure编译器从java更改javascript变量和函数名称

我希望能够根据某些条件更改javascript文件中的变量和函数名称,然后输出修改后的javascript.这类似于javascript minifier的功能.这是一个例子:我有这个javascript代码

var something=5;
something++;
function doSomething(n){
   alert(n);
}
doSomething(something):
Run Code Online (Sandbox Code Playgroud)

现在我想更换something,并doSomethingsomethingElsedoSomethingElse,并返回下面的JavaScript代码:

var somethingElse=5;
somethingElse++;
function doSomethingElse(n){
   alert(n);
}
doSomethingElse(somethingElse):
Run Code Online (Sandbox Code Playgroud)

我认为这可以在rhino或google closure编译(基于rhino)中完成,但不知道如何.我也对其他建议持开放态度.

谢谢

javascript java rhino google-closure-compiler

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