Grunt babel多个文件并保留源映射

Tod*_*ilo 12 javascript gruntjs grunt-contrib-concat grunt-babel

我正在尝试使用grunt和babel来转换文件夹中的所有js6文件,最后得到一个连接的单个文件(js5),其中包含原始es6文件的工作源映射.但是,源映射不起作用.我的babel,concat设置如下:

 "babel": {
        options: {
            sourceMap : true
        },
        dist: {
            files:[
                {
                    expand: true,
                    cwd: 'wwwroot/js/src',
                    src: ['*.js'],
                    dest: 'tmp/js'
                }]
        }
    },

    concat: {
        options: {
            sourceMap: true
        },
        js: {
            src: [
              'tmp/js/*.js',
            ],
            dest: 'wwwroot/js/app.js'
        }
    }

Versions:
"grunt": "0.4.5",
"grunt-bower-task": "0.4.0",
"grunt-babel": "5.0.1",
"grunt-contrib-concat" : "0.5.1"
Run Code Online (Sandbox Code Playgroud)

我最终得到了一个包含大量js文件和src映射(tmp目录)的文件夹.但是将它们合并到一个文件中会完全混淆源映射.

想法?此外,我可以以某种方式跳过临时文件的制作和排序只是将结果输入concat?

Pra*_*rma 15

颠倒任务的顺序将使这更容易.首先concat在JS文件上运行任务.之后使用以下选项babelconcat任务创建的单个文件上运行任务

options: {
                sourceMap: true,
                inputSourceMap: grunt.file.readJSON('script.js.map')
            },
Run Code Online (Sandbox Code Playgroud)

这里的script.js.map文件是concattask 生成的源映射文件的名称.由于inputSourceMap选项不包括源映射对象,我们使用grunt.file API的readJSON方法传递它

完整的Grunt文件配置为:

concat: {
        options: {
            sourceMap: true
        },
        js: {
            src: ['Modules/**/js/*.js'],
            dest: 'script.js'
        }
    },
    babel: {
        dist: {
            options: {
                sourceMap: true,
                inputSourceMap: grunt.file.readJSON('script.js.map')
            },
            src: [
                'script.js',
            ],
            dest: 'app.js'
        }
    }
Run Code Online (Sandbox Code Playgroud)

示例项目:https://github.com/pra85/Grunt-Concat-Babel-Example

  • 这大多数工作,Grunt文件一直试图在生成之前读取源映射.为了解决这个问题,我注册了一个在concat和babel之间运行的自定义任务,它将babel配置的`inputSourceMap`选项加入.让我的Gruntfile.js看起来像这样:http://jsbin.com/rijazetaxe/3/edit?js (11认同)
  • 这有效,谢谢.我需要做的是使它在visual studio task runner中工作是改变:inputSourceMap:function(){if(grunt.file.exists('../ concatinated-es6.js.map')){return grunt. file.readJSON('concatinated-es6.js.map')} return''; ()否则任务列表会崩溃. (2认同)