【问题标题】:Gulp minified js throws errorGulp缩小的js抛出错误
【发布时间】:2016-07-14 07:51:31
【问题描述】:

我们有很多单独的 JavaScript 文件,当然它们在生产环境中被压缩成各种其他文件。目前我们在命令行中使用Microsoft Ajax Minifier 来执行此任务,但目的是切换到gulpjs

缩小过程本身好像没问题,所有的输出文件都生成了,没有错误写入输出等等。

但我有一个奇怪的问题,gulpjs 生成的 16 个缩小文件中有 4-5 个会抛出各种错误,例如:

无法读取未定义的属性“...”

Uncaught TypeError: (intermediate value)(intermediate value)(...) is not a function

Ajax minifier 调用如下:

AjaxMin.exe -js -xml .\minify.xml -clobber -evals:safeall

来自minify.xml的示例:

<?xml version="1.0" encoding="utf-8"?>
    <root>
      <output path="..\js\min\main.min.js">
        <input path="..\js\filename1.js"/>
        <input path="..\js\filename2.js"/>
        <input path="..\js\filename3.js"/>
        ...
      </output>
      <output path="..\js\min\report.min.js">
        <input path="..\js\filename4.js"/>
        <input path="..\js\filename5.js"/>
        <input path="..\js\filename6.js"/>
        ...
      </output>
      ...
    </root>

来自gulpfile.js的样本

gulp.task("[js]minify-all", function () {
    var mainFiles = [
        "./js/filename1.js",
        "./js/filename2.js",
        "./js/filename3.js",
    ];
    var reportFiles = [
        "./js/filename4.js",
        "./js/filename5.js",
        "./js/filename6.js",
    ];
    ...
    generateMinifiedFile(mainFiles, "./js/min/", "main");
    generateMinifiedFile(reportFiles, "./js/min/", "report");
    ...
}

var generateMinifiedFile = function(inputFiles, outputPath, outputFileName) {
    gulp.src(inputFiles)
        .pipe(concat(outputFileName + ".js"))
        .pipe(minify({
            ext: {
                min: ".min.js"
            },
            noSource: true
        }))
        .pipe(gulp.dest(outputPath));
};

如果有问题,这里是package.json

{
  "name": "package",
  "version": "1.0.0",
  "private": true,
  "devDependencies": {
    "gulp": "3.9.1",
    "gulp-bower": "0.0.13",
    "gulp-concat": "^2.6.0",
    "gulp-config": "0.3.0",
    "gulp-less": "3.0.5",
    "gulp-minify": "0.0.12",
    "gulp-minify-css": "1.2.4",
    "gulp-plumber": "1.1.0",
    "gulp-watch": "4.3.5"
  }
}

总结一下:

  • 使用非缩小的 js 文件,网站运行良好。
  • 使用AjaxMin.exe创建的缩小的js文件,网站运行良好。
  • 使用由gulpjs 创建的缩小的 js 文件,站点中断。

有人有什么我想念的建议吗?

更新

创建控制器示例:

var settingsModule = angular.module("settingsModule", ["rootModule"]);
settingsModule.controller('settingsCasesController', ["$rootScope", "$scope", "$http", "DataService", function ($rootScope, $scope, $http, dataService) {
    ...
}

【问题讨论】:

  • 您是否使用 Angular 可能在您的资源中?
  • @IlyaNovojilov 是的,角度文件是页面上的直接引用,因此它们不会被缩小到任何输出文件中
  • 你缩小你的角度指令吗?如果是这样stackoverflow.com/questions/18782324/…
  • @IlyaNovojilov 是的,他们应该是安全的(我必须检查一下才能给出 100% 肯定的答案),但是使用AjaxMin 也是?
  • @IlyaNovojilov 仔细检查,角度指令是缩小安全的

标签: javascript gulp minify gulp-minify


【解决方案1】:

注意:这应该是一个评论,但它是一个答案,因为它有点长,而且答案更容易写和阅读......

首先,我尝试将gulp-minify 选项manglecompress 都设置为false

如果代码运行正常,您应该尝试将false 仅设置一个选项,看看是哪一个导致了失败。

如果代码中断(这会很奇怪,因为我认为压缩器的主要任务是压缩和破坏......),我会尝试手动比较一个 gulp-minifyed 文件的输出源码,看看有什么变化...

【讨论】:

  • 我将compressmangle 设置为false,但我仍然遇到同样的问题
  • 我会尝试手动将一个 gulp-minified 文件的输出与源文件进行比较,看看有什么变化,并从这些变化中追溯到根本问题。
  • 还有一个问题:你的代码是否通过了 jslint 检查?
  • 由于涉及到很多遗留文件,我一味的说不通过。另一方面,这不应该是 AjaxMin 的问题吗?
  • 有可能(嗯,这很确定... :-) 这两个缩小器具有不同的严格程度,甚至不同的语言标准合规级别... :-(
猜你喜欢
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多