Ajaxmin MinifyJavascript 在对象前添加 {}

Ajaxmin MinifyJavascript adding {} before object

我在使用 AjaxMin 的 MinifyJavaScript 方法缩小 javascript file 时遇到问题。

未压缩代码

if (typeof define === 'function' && define.amd) {
        define(['moment'], function (moment) {
            root.moment = factory(moment)
            return root.moment
        })
    } else if (typeof exports === 'object') {
        module.exports = factory(require('moment'))
    } else {
        root.moment = factory(root.moment)
    }

精简代码

if(typeof define=="function"&&define.amd)define(["moment"],function(i){return n.moment=t(i),n.moment});else if(typeof exports=="object"){module{}.exports=t(require("moment"))}else n.moment=t(n.moment)}

此处在压缩代码中,“{}”是在模块对象之后添加的,例如:module{}.exports 但它应该是 module.exports

在缩小文件之前还有几个文件: 1.jquery-3.3.1.min.js 2. moment.min.js

所有文件都捆绑在一个文件中,然后完成缩小。

我认为这是问题的原因

  1. ajaxmin source code模块好像是保留字
  2. If/else 作用域无法正确编译为输出。

这似乎导致了问题

var blockType = AjaxMin.BlockTypeModule.FormatInvariant
(moduleScope.ScopeName.IfNullOrWhiteSpace(AjaxMin.ModuleNameImplicit));

解决方法(这是我在我的项目中所做的):

  • 您可以将字符串 module{}. 替换为 module.
  • 使用三元运算符而不是 if/else(很可能这将跳过整个块的替换)
  • 使用该文件的缩小版本(这将跳过缩小)