我很抱歉我在询问uglify-js
错误。但是,我尝试了这些网站中的成员提出的所有方法,但仍然没有任何改进。我试图吞下谷歌聚合物应用程序到dist文件夹。不知怎的,总是有错误抛出,它让我无法通过apache cordova成功准备和编译应用程序到android。非常希望这里的成员真的需要检查这个编码因为我花了两个星期但没有得到任何结果。
我的gulpfile.js
:
'use strict';
// Include Gulp & Tools We'll Use
var gulp = require('gulp');
var jshint = require('gulp-jshint');
var $ = require('gulp-load-plugins')();
var del = require('del');
var runSequence = require('run-sequence');
var browserSync = require('browser-sync');
var reload = browserSync.reload;
var merge = require('merge-stream');
var path = require('path');
var fs = require('fs');
var glob = require('glob');
var build = require('gulp-build');
var AUTOPREFIXER_BROWSERS = [
'ie >= 10',
'ie_mob >= 10',
'ff >= 30',
'chrome >= 34',
'safari >= 7',
'opera >= 23',
'ios >= 7',
'android >= 4.4',
'bb >= 10'
];
var styleTask = function (stylesPath, srcs) {
return gulp.src(srcs.map(function(src) {
return path.join('app', stylesPath, src);
}))
.pipe($.changed(stylesPath, {extension: '.css'}))
.pipe($.autoprefixer(AUTOPREFIXER_BROWSERS))
.pipe(gulp.dest('.tmp/' + stylesPath))
.pipe($.if('*.css', $.cssmin()))
.pipe(gulp.dest('dist/' + stylesPath))
.pipe($.size({title: stylesPath}));
};
// Compile and Automatically Prefix Stylesheets
gulp.task('styles', function () {
return styleTask('styles', ['**/*.css']);
});
gulp.task('elements', function () {
return styleTask('elements', ['**/*.css']);
});
// Lint JavaScript
gulp.task('jshint', function () {
return gulp.src([
'app/scripts/**/*.js',
'app/elements/**/*.js',
'app/elements/**/*.html'
])
.pipe(reload({stream: true, once: true}))
.pipe($.jshint.extract()) // Extract JS from .html files
.pipe($.jshint())
.pipe($.jshint.reporter('jshint-stylish'))
.pipe($.if(!browserSync.active, $.jshint.reporter('fail')));
});
// Optimize Images
gulp.task('images', function () {
return gulp.src('app/images/**/*')
.pipe($.cache($.imagemin({
progressive: true,
interlaced: true
})))
.pipe(gulp.dest('dist/images'))
.pipe($.size({title: 'images'}));
});
// Copy All Files At The Root Level (app)
gulp.task('copy', function () {
var app = gulp.src([
'app/*',
'!app/test',
'!app/precache.json'
], {
dot: true
}).pipe(gulp.dest('dist'));
var bower = gulp.src([
'bower_components/**/*'
]).pipe(gulp.dest('dist/bower_components'));
var elements = gulp.src(['app/elements/**/*.html'])
.pipe(gulp.dest('dist/elements'));
var swBootstrap = gulp.src(['bower_components/platinum-sw/bootstrap/*.js'])
.pipe(gulp.dest('dist/elements/bootstrap'));
var swToolbox = gulp.src(['bower_components/sw-toolbox/*.js'])
.pipe(gulp.dest('dist/sw-toolbox'));
var vulcanized = gulp.src(['app/elements/elements.html'])
.pipe($.rename('elements.vulcanized.html'))
.pipe(gulp.dest('dist/elements'));
return merge(app, bower, elements, vulcanized, swBootstrap, swToolbox)
.pipe($.size({title: 'copy'}));
});
// Copy Web Fonts To Dist
gulp.task('fonts', function () {
return gulp.src(['app/fonts/**'])
.pipe(gulp.dest('dist/fonts'))
.pipe($.size({title: 'fonts'}));
});
// Scan Your HTML For Assets & Optimize Them
gulp.task('html', function () {
var assets = $.useref.assets({searchPath: ['.tmp', 'app', 'dist']});
return gulp.src(['app/**/*.html', '!app/{elements,test}/**/*.html'])
// Replace path for vulcanized assets
.pipe($.if('*.html', $.replace('elements/elements.html', 'elements/elements.vulcanized.html')))
.pipe(assets)
// Concatenate And Minify JavaScript
.pipe($.if('*.js', $.uglify({preserveComments: 'some'})))
// Concatenate And Minify Styles
// In case you are still using useref build blocks
.pipe($.if('*.css', $.cssmin()))
.pipe(assets.restore())
.pipe($.useref())
// Minify Any HTML
.pipe($.if('*.html', $.minifyHtml({
quotes: true,
empty: true,
spare: true
})))
// Output Files
.pipe(gulp.dest('dist'))
.pipe($.size({title: 'html'}));
});
// Vulcanize imports
gulp.task('vulcanize', function () {
var DEST_DIR = 'dist/elements';
return gulp.src('dist/elements/elements.vulcanized.html')
.pipe($.vulcanize({
dest: DEST_DIR,
strip: true,
inlineCss: true,
inlineScripts: true
}))
.pipe(gulp.dest(DEST_DIR))
.pipe($.size({title: 'vulcanize'}));
});
// Generate a list of files that should be precached when serving from 'dist'.
// The list will be consumed by the <platinum-sw-cache> element.
gulp.task('precache', function (callback) {
var dir = 'dist';
glob('{elements,scripts,styles}/**/*.*', {cwd: dir}, function(error, files) {
if (error) {
callback(error);
} else {
files.push('index.html', './', 'bower_components/webcomponentsjs/webcomponents-lite.min.js');
var filePath = path.join(dir, 'precache.json');
fs.writeFile(filePath, JSON.stringify(files), callback);
}
});
});
// Clean Output Directory
gulp.task('clean', del.bind(null, ['.tmp', 'dist']));
// Watch Files For Changes & Reload
gulp.task('serve', ['styles', 'elements', 'images'], function () {
browserSync({
notify: false,
snippetOptions: {
rule: {
match: '<span id="browser-sync-binding"></span>',
fn: function (snippet) {
return snippet;
}
}
},
// Run as an https by uncommenting 'https: true'
// Note: this uses an unsigned certificate which on first access
// will present a certificate warning in the browser.
// https: true,
server: {
baseDir: ['.tmp', 'app'],
routes: {
'/bower_components': 'bower_components'
}
}
});
gulp.watch(['app/**/*.html'], reload);
gulp.watch(['app/styles/**/*.css'], ['styles', reload]);
gulp.watch(['app/elements/**/*.css'], ['elements', reload]);
gulp.watch(['app/{scripts,elements}/**/*.js'], ['jshint']);
gulp.watch(['app/images/**/*'], reload);
});
// Build and serve the output from the dist build
gulp.task('serve:dist', ['default'], function () {
browserSync({
notify: false,
snippetOptions: {
rule: {
match: '<span id="browser-sync-binding"></span>',
fn: function (snippet) {
return snippet;
}
}
},
// Run as an https by uncommenting 'https: true'
// Note: this uses an unsigned certificate which on first access
// will present a certificate warning in the browser.
// https: true,
server: 'dist'
});
});
// Build Production Files, the Default Task
gulp.task('default', ['clean'], function (cb) {
runSequence(
['copy', 'styles'],
'elements',
['jshint', 'images', 'fonts', 'html'],
'vulcanize', 'precache',
cb);
});
gulp.task('build', function() {
gulp.src('scripts/*.js')
.pipe(build({ GA_ID: '123456' }))
.pipe(gulp.dest('dist'))
});
gulp.task('lint', function() {
return gulp.src('./lib/*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'));
});
gulp.task('uglify', function() {
gulp.src('public/js/*.js')
.pipe(uglify())
.pipe(gulp.dest('dist/js'))
});
gulp.task('scripts', ['clean'], function () {
return gulp.src('js/*.js')
.pipe(uglify().on('error', function(e){
console.log(e);
}))
.pipe(gulp.dest('minjs'));
});
gulp.task('js', function(){
return gulp.src(paths.src.js)
.pipe(babel())
.pipe(uglify())
.pipe(gulp.dest(paths.dist.js));
});
gulp.task("uglify-src", function() {
gulp.src([ "src/js/**/*.js" ])
.pipe(concat("app.js"))
.pipe(ignore.exclude([ "**/*.map" ]))
.pipe(uglify())
.pipe(gulp.dest("dist/js"));
});
// Load tasks for web-component-tester
// Adds tasks for `gulp test:local` and `gulp test:remote`
try { require('web-component-tester').gulp.init(gulp); } catch (err) {}
// Load custom tasks from the `tasks` directory
try { require('require-dir')('tasks'); } catch (err) {}
我的吞咽结果
events.js:141
throw er; // Unhandled 'error' event
^
Error at new JS_Parse_Error (eval at <anonymous> (C:\Users\CharlesCks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1),`<anonymous>:1526:18)
at js_error (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:1534:11)
at parse_error (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:1647:9)
at next_token (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:1911:9)
at skip_line_comment (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:1753:16)
at handle_slash (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:1842:20)
at Object.next_token [as input] (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:1898:27)
at next (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:2011:25)
at semicolon (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:2058:30)
at simple_statement (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:2239:73)
at eval (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:2107:20)
at eval (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:2072:24)
at eval (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:2819:23)
at Object.parse (eval at <anonymous> (C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:22:1), <anonymous>:2829:7)
at C:\Users\Charles Cks\polymer-1.0.2\node_modules\uglify-js\tools\node.js:61:33
at Array.forEach (native)
events.js
exports._ElementCache = function () {
var cache = {},
guidCounter = 1,
expando = "data" + (new Date).getTime();
this.getData = function (elem) {
var guid = elem[expando];
if (!guid) {
guid = elem[expando] = guidCounter++;
cache[guid] = {};
}
return cache[guid];
};
this.removeData = function (elem) {
var guid = elem[expando];
if (!guid) return;
delete cache[guid];
try {
delete elem[expando];
}
catch (e) {
if (elem.removeAttribute) {
elem.removeAttribute(expando);
}
}
};
};
/**
* Fix an event
* @param event
* @returns {*}
*/
exports._fixEvent = function (event) {
function returnTrue() {
return true;
}
function returnFalse() {
return false;
}
if (!event || !event.stopPropagation) {
var old = event || window.event;
// Clone the old object so that we can modify the values
event = {};
for (var prop in old) {
event[prop] = old[prop];
}
// The event occurred on this element
if (!event.target) {
event.target = event.srcElement || document;
}
// Handle which other element the event is related to
event.relatedTarget = event.fromElement === event.target ?
event.toElement :
event.fromElement;
// Stop the default browser action
event.preventDefault = function () {
event.returnValue = false;
event.isDefaultPrevented = returnTrue;
};
event.isDefaultPrevented = returnFalse;
// Stop the event from bubbling
event.stopPropagation = function () {
event.cancelBubble = true;
event.isPropagationStopped = returnTrue;
};
event.isPropagationStopped = returnFalse;
// Stop the event from bubbling and executing other handlers
event.stopImmediatePropagation = function () {
this.isImmediatePropagationStopped = returnTrue;
this.stopPropagation();
};
event.isImmediatePropagationStopped = returnFalse;
// Handle mouse position
if (event.clientX != null) {
var doc = document.documentElement, body = document.body;
event.pageX = event.clientX +
(doc && doc.scrollLeft || body && body.scrollLeft || 0) -
(doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY +
(doc && doc.scrollTop || body && body.scrollTop || 0) -
(doc && doc.clientTop || body && body.clientTop || 0);
}
// Handle key presses
event.which = event.charCode || event.keyCode;
// Fix button for mouse clicks:
// 0 == left; 1 == middle; 2 == right
if (event.button != null) {
event.button = (event.button & 1 ? 0 :
(event.button & 4 ? 1 :
(event.button & 2 ? 2 : 0)));
}
}
return event;
};
/**
* @constructor
*/
exports._EventManager = function (cache) {
var nextGuid = 1;
this.addEvent = function (elem, type, fn) {
var data = cache.getData(elem);
if (!data.handlers) data.handlers = {};
if (!data.handlers[type])
data.handlers[type] = [];
if (!fn.guid) fn.guid = nextGuid++;
data.handlers[type].push(fn);
if (!data.dispatcher) {
data.disabled = false;
data.dispatcher = function (event) {
if (data.disabled) return; // *** events.js:141 ***
event = exports._fixEvent(event);
var handlers = data.handlers[event.type];
if (handlers) {
for (var n = 0; n < handlers.length; n++) {
handlers[n].call(elem, event);
}
}
};
}
if (data.handlers[type].length == 1) {
if (document.addEventListener) {
elem.addEventListener(type, data.dispatcher, false);
}
else if (document.attachEvent) {
elem.attachEvent("on" + type, data.dispatcher);
}
}
};
function tidyUp(elem, type) {
function isEmpty(object) {
for (var prop in object) {
return false;
}
return true;
}
var data = cache.getData(elem);
if (data.handlers[type].length === 0) {
delete data.handlers[type];
if (document.removeEventListener) {
elem.removeEventListener(type, data.dispatcher, false);
}
else if (document.detachEvent) {
elem.detachEvent("on" + type, data.dispatcher);
}
}
if (isEmpty(data.handlers)) {
delete data.handlers;
delete data.dispatcher;
}
if (isEmpty(data)) {
cache.removeData(elem);
}
}
this.removeEvent = function (elem, type, fn) {
var data = cache.getData(elem);
if (!data.handlers) return;
var removeType = function (t) {
data.handlers[t] = [];
tidyUp(elem, t);
};
if (!type) {
for (var t in data.handlers) removeType(t);
return;
}
var handlers = data.handlers[type];
if (!handlers) return;
if (!fn) {
removeType(type);
return;
}
if (fn.guid) {
for (var n = 0; n < handlers.length; n++) {
if (handlers[n].guid === fn.guid) {
handlers.splice(n--, 1);
}
}
}
tidyUp(elem, type);
};
this.proxy = function (context, fn) {
if (!fn.guid) {
fn.guid = nextGuid++;
}
var ret = function () {
return fn.apply(context, arguments);
};
ret.guid = fn.guid;
return ret;
};
};
/**
* Trigger a click on an element
* @param elem
*/
exports.triggerClick = function (elem) {
var evObj;
if (document.createEvent) {
window.setTimeout(function () {
evObj = document.createEvent("MouseEvents");
evObj.initEvent("click", true, true);
elem.dispatchEvent(evObj);
}, 0);
} else {
window.setTimeout(function () {
if (document.createEventObject) {
evObj = document.createEventObject();
evObj.cancelBubble = true;
elem.fireEvent("on" + "click", evObj);
}
}, 0);
}
};
var cache = new exports._ElementCache();
var eventManager = new exports._EventManager(cache);
eventManager.triggerClick = exports.triggerClick;
exports.manager = eventManager;
答案 0 :(得分:0)
这个答案来得晚,但我刚刚遇到了与gulp-uglify抛出错误的类似问题。 gulpfile.js中的uglify用于缩小js文件。我建议您检查所有js文件,因为其中一个文件可能存在错误。我建议你从app.js
开始