代码之家  ›  专栏  ›  技术社区  ›  sunknudsen

如何使用Browserify和coffeeify转换将CoffeeScript转换为JavaScript(最近2个版本和ie>=11)?

  •  0
  • sunknudsen  · 技术社区  · 6 年前

    CoffeeScript 2 gulp-uglify .

    GulpUglifyError: unable to minify JavaScript
    Caused by: SyntaxError: Unexpected token: operator «=», expected: punc «,»
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   sunknudsen    6 年前

    很难弄清楚这一点,所以在这里删除一些代码,以防它可以帮助其他人。

    Gulp 4 CoffeeScript 2

    一个突破性的变化是CoffeeScript现在输出旧浏览器不支持的现代语法(它也会中断) gulp-uglify ). 为了支持这些浏览器(并继续使用gulpuglify), transpilation 是必需的。

    npm install @babel/core @babel/preset-env browserify coffeeify coffeescript glob gulp gulp-sourcemaps gulp-uglify gulp-util merge-stream vinyl-buffer vinyl-source-stream --save-dev
    

    编辑 gulpfile.js

    'use strict';
    
    const gulp = require('gulp');
    const gutil = require('gulp-util');
    const merge = require('merge-stream');
    const browserify = require('browserify');
    const glob = require('glob');
    const source = require('vinyl-source-stream');
    const path = require('path');
    const buffer = require('vinyl-buffer');
    const sourcemaps = require('gulp-sourcemaps');
    const uglify = require('gulp-uglify');
    
    var minify;
    if (process.env.MINIFY === 'true') {
        minify = true;
    } else {
        minify = false;
    }
    
    function browserifyTask() {
        var files = glob.sync('./app/*.coffee');
        return merge(files.map(function(file) {
            return browserify({
                entries: file,
                extensions: ['.coffee'],
                debug: true
            })
            .transform('coffeeify', {
                transpile: {
                    presets: [
                        [
                            '@babel/preset-env',
                            {
                                targets: {
                                    browsers: ['last 2 versions', 'ie >= 11']
                                }
                            }
                        ]
                    ]
                }
            })
            .on('error', gutil.log)
            .bundle()
            .pipe(source(path.basename(file, '.coffee') + ".js"))
            .pipe(buffer())
            .pipe(sourcemaps.init({ loadMaps: true }))
            .pipe((minify === true) ? uglify().on('error', gutil.log) : gutil.noop())
            .pipe(sourcemaps.write('./'))
            .pipe(gulp.dest('public/js'));
        }));
    }
    
    const build = gulp.series(browserifyTask);
    
    exports.default = build;