ошибка потока gulp-uglify после gulp-rename

Gulp noob здесь, и я вижу странное поведение с gulp-uglify.

Вот моя задача:

var gulp = require ("gulp");
var util = require ("gulp-util");
var clean = require ("gulp-clean");
var cleanCSS = require ("gulp-clean-css");
var debug = require ("gulp-debug");
var filesize = require ("gulp-filesize");
var rename = require ("gulp-rename");
var sass = require ("gulp-ruby-sass");
var browserify = require (BROWSERIFY);
var source = require ("vinyl-source-stream");
var buffer = require ("vinyl-buffer");
var sourceMaps = require("gulp-sourcemaps");
var babelify = require ("babelify");
var uglify = require ("gulp-uglify");
var concatFileNames = require ("gulp-concat-filenames");
var header = require ("gulp-header");

function browserifyTask () {

    return browserify ("./app/main.js")
        .transform(babelify)
        .bundle()
        .pipe (source("main.js"))
        .pipe (buffer())
        .pipe (sourceMaps.init({loadMaps: true}))

        .pipe (sourceMaps.write("./")) // Ensure the source map gets written
        .pipe (gulp.dest("./public/js"))

        // Now do production build stuff

        .pipe (rename("main.min.js"))
        .pipe (sourceMaps.init({loadMaps: true}))
        .pipe (uglify().on ("error", util.log))
        .pipe (sourceMaps.write("./")) // Ensure the source map gets written
        .pipe (gulp.dest("./public/js"))
}

Идея состоит в том, чтобы создать обычный (не минимизированный) JS и минимизированную версию.

Однако Uglify выдает ошибку:

[16:20:26] Using gulpfile C:\play\untitled\gulpfile.js
[16:20:26] Starting 'browserify'...
[16:20:28] { [Error: C:\play\untitled\public\js\main.min.js: Unexpected      token: punc (:)]
  message: 'C:\\play\\untitled\\public\\js\\main.min.js: Unexpected token: punc (:)',
  fileName: 'C:\\play\\untitled\\public\\js\\main.min.js',
  lineNumber: 1,
  stack: 'Error\n    at new JS_Parse_Error (eval at <anonymous>  (C:\\play\\untitled\\node_modules\\uglify-js\\tools\\node.js:22:1),  <anonymous>:1526:18)\n    at js_error (eval at <anonymous>  (C:\\play\\untitled\\node_modules\\uglify-js\\tools\\node.js:22:1),  <anonymous>:1534:11)\n    at croak (eval at <anonymo
us> (C:\\play\\untitled\\node_modules\\uglify-js\\tools\\node.js:22:1),  <anonymous>:2026:9)\n    at token_error (eval at <anonymous>  (C:\\play\\untitled\\node_modules\\uglify-js\\tools\\node.js:22:1),  <anonymous>:2034:9)\n    at unexpected (eval at <anonymous>  (C:\\play\\untitled\\node_modules\\uglify-js\\tool
s\\node.js:22:1), <anonymous>:2040:9)\n    at semicolon (eval at <anonymous> (C:\\play\\untitled\\node_modules\\uglify-js\\tools\\node.js:22:1),     <anonymous>:2060:56)\n    at simple_statement (eval at <anonymous>  (C:\\play\\untitled\\node_modules\\uglify-js\\tools\\node.js:22:1),  <anonymous>:2240:73)\n    at ev
al (eval at <anonymous> (C:\\play\\untitled\\node_modules\\uglify- js\\tools\\node.js:22:1), <anonymous>:2093:47)\n    at eval (eval at <anonymous>  (C:\\play\\untitled\\node_modules\\uglify-js\\tools\\node.js:22:1),  <anonymous>:2073:24)\n    at block_ (eval at <anonymous>  (C:\\play\\untitled\\node_modules\\ugli
fy-js\\tools\\node.js:22:1), <anonymous>:2353:20)',
  showStack: false,
  showProperties: true,
  plugin: 'gulp-uglify' }

Казалось бы, ему что-то не нравится в JS, который передается по конвейеру, но Uglify не выдает ошибку, если он вызывается до первого вызова gulp.dest() (и я получаю минимизированный код).

В этом сообщении указано, что исходные карты могут быть проблемой, и используется gulp-ignore для исключить их. Пробовал, и это не сработало; такая же ошибка.

Я пропустил что-то очевидное здесь?

Спасибо, Джефф


person jeffeld    schedule 08.06.2016    source источник


Ответы (1)


Так что это были исходные карты, заставившие Uglify отказаться. Кажется, существует более общая проблема объединения Browserify с другими плагинами, которая связана с тем, что Browserify хочет что-то в буферах, а другие плагины хотят что-то в потоках.

С этой целью я пересматриваю свою функцию задачи следующим образом:

function browserifyTask () {

    function doBrowserify (isProduction) {
        browserify ("./app/main.js")
            .transform(babelify)
            .bundle()
            .pipe (source("main.js"))
            .pipe (isProduction ? rename("main.min.js") : util.noop())
            .pipe (buffer())
            .pipe (sourceMaps.init({loadMaps: true}))
            .pipe (isProduction ? uglify().on ("error", util.log) : util.noop())
            .pipe (sourceMaps.write("./")) 
            .pipe (gulp.dest("./public/js"))
    }

    doBrowserify(false);
    doBrowserify(true);
}

Не такой элегантный, как мне бы хотелось, но он выполняет свою работу, и мне нужно заняться этим проектом (и не увязнуть в процессе сборки).

person jeffeld    schedule 09.06.2016