尝试使用grunt-contrib-uglify创建源映射时出错

时间:2014-07-09 15:02:55

标签: angularjs gruntjs uglifyjs grunt-contrib-uglify

我尝试为从ngBoilerplate模板派生的AngularJS应用程序添加源图,该模板使用grunt构建,grunt-contrib-uglify将JavaScript源缩小为一个app.js文件。< / p>

问题是grunt实际上无法将源映射写入磁盘,这个神秘的错误(使用grunt --verbose,仅略微编辑):

Running "uglify" task

Running "uglify:compile" (uglify) task
Verifying property uglify.compile exists in config...OK
Files: release/assets/MyApp-1.0.0.debug.js -> release/assets/MyApp-1.0.0.js
Options: banner="", footer="", compress={"warnings":false}, mangle={}, beautify=false, report="min", expression=false, sourceMap
Minifying with UglifyJS...Reading release/assets/MyApp-1.0.0.debug.js...OK
OK
Writing release/assets/MyApp-1.0.0.js...OK
Writing release/assets/MyApp-1.0.0.js.map...ERROR
Warning: Unable to write "release/assets/MyApp-1.0.0.map" file (Error code: undefined). Use --force to continue.

Aborted due to warnings.

关键部分是:

  

警告:无法编写&#34;发布/ assets / MyApp-1.0.0.map&#34; file(错误代码:undefined)。使用--force继续。

现在你可能会想说这是问题Grunt Uglify source map “unable to write”的重复,除了案例是一个简单的问题,其中提问者使用旧版本的包的新配置样式,导致错误Unable to write "true" file。在我的情况下不是这样。很明显,它试图编写的文件名是正确的(JS文件加上&#34; .map&#34;扩展名),但是系统无法做到这一点并且给出了一个巨大的无益的&#34;错误代码:undefined&#34;回来。

packages.json文件中的版本 - 我清理了node_modules文件夹并重新运行了npm install以确保这是正在使用的内容:

"devDependencies": {
  "grunt": "0.4.5",
  "grunt-recess": "0.6.1",
  "grunt-contrib-jshint": "0.10.0",
  "grunt-contrib-concat": "0.4.0",
  "grunt-contrib-watch": "0.6.1",
  "grunt-contrib-uglify": "0.5.0",
  "grunt-karma": "0.6.2",
  "grunt-ngmin-with-comments": "0.0.3",
  "grunt-html2js": "0.2.3",
  "grunt-groundskeeper": "0.1.9",
  "lodash": "2.4.1",
  "grunt-contrib-clean": "0.5.0",
  "grunt-contrib-copy": "0.5.0",
  "grunt-contrib-connect": "^0.7.1"
}

在node_modules内部,uglify-js版本为2.4.14。

我的Gruntfile配置并不完全是样板文件ngBoilerplate - 我已经对它进行了一些修改,以便我可以得到一个未被明确的.debug.js和一个缩小的.js。这是:

uglify: {
    compile: {
        options: {
            sourceMap: true
        },
        files: {
            '<%= minJs %>': '<%= debugJs %>'
        }
    }
}

我也尝试过:

  • 指定sourceMapName属性
    • 作为字符串
    • 作为一个函数,它接受jsName并附加&#39; .map&#39;对它
    • 作为不尝试在release / assets子目录中编写的函数
  • 不使用grunt模板并明确指定minJs和debugJs的文件名。

没有任何效果。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我使用不同的设置获得相同的错误。如果我禁用源图,一切都会好起来的。我花了几个小时调试错误并放弃了。

只需切换到旧版本的grunt-contrib-uglify,例如~0.4,直到找出错误为止。