- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个Gruntfile.js
,如下所示,带有闭包编译器配置,
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
'closure-compiler': {
jstracker: {
closurePath: '/usr/local/',
js: [
'src/js/banner.js',
'src/js/lib/json.js',
'src/js/lib/jstz.js',
'src/js/init.js',
'src/js/helpers.js',
'src/js/lib/sha1.js',
'src/js/lib/murmur.js',
'src/js/lib/base64.js',
'src/js/tracker.js',
'src/js/prayagupd.js',
'src/js/constructor.js'
],
jsOutputFile: 'dist/<%= pkg.name %>.min.js',
options: {
compilation_level: 'ADVANCED_OPTIIZATIONS',
warning_level:"DEFAULT",
language_in: 'ECMASCRIPT5_STRICT'
}
}
},
qunit: {
files: ['tests/**/*.html']
},
jshint: {
files: ['Gruntfile.js', 'src/**/*.js', 'tests/*.js'],
options: {
// options here to override JSHint defaults
globals: {
jQuery: true,
console: true,
module: true,
document: true
}
}
},
watch: {
files: ['<%= jshint.files %>'],
tasks: ['jshint', 'qunit']
}
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-closure-compiler');
grunt.registerTask('test', ['jshint', 'closure-compiler', 'qunit']);
grunt.registerTask('default', ['jshint', 'closure-compiler', 'qunit']);
};
当我执行 grunt
生成缩小的 js 时,我在 target
文件夹中看到缩小版本,
$ ls -lh dist/
total 44K
-rw-rw-r-- 1 prayagupd prayagupd 27K Jul 6 16:34 prayagupd.min.js
-rw-rw-r-- 1 prayagupd prayagupd 514 Jul 6 16:34 prayagupd.min.js.report.txt
但是以下 4 个警告都指向使用 this
,稍后在浏览器中使用时会弹出错误(Uncaught ReferenceError: JSON2 is not defined
)。
src/js/lib/json.js:26: WARNING - dangerous use of the global this object
if (!this.JSON2) {
^
src/js/lib/json.js:27: WARNING - dangerous use of the global this object
this.JSON2 = {};
^
src/js/leakers.js:1995: WARNING - dangerous use of the global this object
this.setContextProperty("leaksId", leaksId);
^
src/js/leakers.js:2002: WARNING - dangerous use of the global this object
this.setContextProperty("userId", userId);
^
0 error(s), 4 warning(s)
SIMPLE_OPTIMIZATIONS
关卡工作正常。
//src/js/lib/json.js:26
// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.
if (!this.JSON2) {
this.JSON2 = {};
}
和,
//src/js/leakers.js
/**
* Set context properties, properties which are used with every event
*/
setContextProperty: function(name, value) {
context[name] = value;
},
/**
* Set leaks ID
*/
setLeakesId: function(leakesId) {
this.setContextProperty("leakesId", leakesId);
},
/**
* Set user ID
*/
setUserId: function(userId){
this.setContextProperty("userId", userId);
}
1) 要求闭包忽略this
,这在ADVANCED_OPTIMIZATIONS
下似乎不可能
或
2) 找到将 this
替换为并开始工作的方法。
最佳答案
编译器基本上是在警告您正在以一种不确定的方式使用“this”(您可能不小心使用了全局 this)并且可能与高级编译不兼容。您想要验证“this”值是否正确,并通过使用 @this 注释向编译器表明这一点。
此警告记录在此处: https://developers.google.com/closure/compiler/docs/error-ref
关于javascript - 关闭编译 ADVANCED_OPTIMIZATIONS 提示使用这个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24595191/
我正在借助 Google 闭包编译器编写 Google Chrome 扩展程序。我大量使用消息 API 在不同进程上运行的代码之间进行通信。这就是为什么我的文件需要单独编译的原因。如果我使用高级优化,
当运行使用 ADVANCED_OPTIMIZATIONS 编译的以下代码时,我得到了意外的输出(至少对我来说)。 /** * @typedef {{ * version: string,
我知道以前有人问过类似的问题,但方法变化很快,所以我想了解当前的最佳做法。 (事实上,就在 2 天前,Chad Killingsworth 在三年前的 accepted answer 中添加了一条
我有一个Gruntfile.js,如下所示,带有闭包编译器配置, module.exports = function(grunt) { grunt.initConfig({ pkg: grun
使用Google Closure Compiler (ADVANCED_OPTIMIZATIONS),似乎当代码封装在一个函数中时,有一些高级优化是做不到的。 (function(){ var db
我最近一直在检查 Google Closure Compiler。我下载了 .jar 文件并进行了试用。到目前为止,我必须说我印象非常深刻。我当然可以看到它超越最小化的用处。支持 Google 团队!
当我在闭包中使用 ADVANCED_OPTIMIZATIONS 时,我可以添加到 web.config 属性,例如: 当我在代码中写入时: if (goog.DEBUG) { code } 在高级模
我不断收到错误消息,指出给定对象的函数(已重命名)不存在。是否有发行版或设置或其他使其工作的东西? 最佳答案 在将 Closure Compiler Advanced Mode 与 jQuery 结合
我是一名优秀的程序员,十分优秀!