如何通过 grunt-contrib-uglify 按顺序缩小 js 文件?

2024-01-14

我有一个如下所示的目录:

/文件夹/b.js
/文件夹/jQuery.js
/文件夹/a.js
/文件夹/sub/c.js

我想将所有这些js文件缩小到一个js文件中in order:

jQuery.js -> a.js -> b.js -> c.js

Q:
1.如何通过grunt-contrib-uglify实现?(事实上,文件很多,单独指定所有源文件路径是不切实际的)

2.btw,如何在调试时获得未缩小的文件,并在发布时获得缩小的单个文件并且无需更改脚本标签在html中(以及如何编写脚本标签)?


好问题!

1) Uglify 将重新排序目标文件中的函数,使函数定义位于顶部,函数执行位于底部,但它seems它将保留函数执行的顺序。

这意味着如果您确保在 Gruntfile 的 Uglify 配置中首先提到 jQuery,则 jQuery 运行来定义其全局函数的函数将被放在第一位。

我使用这个配置:

uglify: {
    options: {
        sourceMap: true
    },
    build: {
        files: {
            'public/all.min.js': ['public/js/vendor/jquery-1.10.2.min.js', 'public/js/*.js'],
        }
    }
}

2)我认为没有一种明确的方法可以实现这一目标。这取决于什么 Web 框架、模板框架以及您有什么样的要求。我使用express+jade,在我的主要jade布局中我有:

if process.env.NODE_ENV === 'production'
  script(src='/all.min.js')
else
  script(src='/js/vendor/jquery-1.10.2.min.js')
  script(src='/js/someScript.js')
  script(src='/js/otherScript.js')

在我的 package.json 中,我有:

"scripts": {
  "postinstall": "grunt"
},

这意味着当我跑步时npm install在部署时(在 Heroku 上)运行 grunt 来缩小/连接文件,并且当应用程序启动时NODE_ENV=production使用缩小的客户端 JavaScript。在本地,我得到了原始的客户端 JavaScript,以便于调试。

两个缺点是:

  • 我必须保持两个脚本文件列表同步(在 Gruntfile 和 layout.js 中)我通过使用解决这个问题*.js在 Gruntfile 中,但这可能不适合所有人。您可以将 javascript 列表放入 Gruntfile 中,并从中创建一个玉模板,但这对于大多数项目来说似乎有点过分了。
  • 如果你不信任你的 Grunt 配置,你基本上必须使用以下命令来测试运行应用程序NODE_ENV=production在本地验证缩小是否按照您的预期方式工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 grunt-contrib-uglify 按顺序缩小 js 文件? 的相关文章

随机推荐

  • 如何将线性线添加到具有数据框的多个数据集的图中?

    我有以下数据框 expected observed group 1 0 5371429 0 0000 1 2 1 3428571 1 3736 1 3 2 6857143 2 4554 1 4 5 3714286 3 6403 1 5 0
  • Sitecore DateField 的 DateTime 属性显示错误的日期

    在我的 Sitecore 项目中我使用DateTime Sitecore 的类型 字段作为属性Item 我试图通过以下代码获取该值 var dateField DateField item Fields Date var itemDate
  • Drupal 6:提交时 form_state 值为空

    我正在尝试在 Drupal 6 中创建一个自定义表单 下面的代码似乎一切正常 包括提交时在数据库中创建一个新条目 但所有 form state 值都是空的 我缺少什么
  • 操作码中的汇编段

    我注意到在操作码中使用了汇编段 Example MOV DWORD PTR SS EBP 30 30 我认为 PTR SS 用于指定EBP 30来自堆栈 SS 堆栈段 我是对的还是完全错的 而且 你能告诉我上面的例子和 MOV DWORD
  • java.lang.IllegalArgumentException:setAttribute:不可序列化的属性

    我继承了一些代码 当我尝试运行它时遇到错误 错误如下 10 08 32 093 ERROR MyServlet 260 Servlet service for servlet MyServlet threw exception java l
  • 复选框的组合框?

    我正在尝试将这些项目制作成ComboBox可检查 我试过这个 http programmingexamples net wiki Qt ModelView ComboBoxOfCheckBoxes http web archive org
  • 复杂的 MySQL 查询

    我正在 WordPress 中创建一个网站 其中包含电视节目的信息 我使用自定义字段来选择每个帖子 桌子看起来像这样 id post id meta key meta value 1 1 name Smallville 2 1 season
  • 我们需要在 ARC 中的 UIAnimationBlocks 中使用 __weak self 吗?

    我们是否需要在 UIAnimation 块中使用 weak self 如下所示 如果我们不将 self 指定为弱 是否会产生保留周期问题 UIView animateWithDuration animationDuration delay
  • Firebase Android,检查对象(具有多个子对象)是否存在

    我正在使用 Firebase 数据库来存储用户的报告 每个用户只能提交 10 份不同的报告 在下面的示例中 我们有一个名为 Jasna Kuljancic 的用户 他提交了 3 份报告 我的问题是如何检查用户是否已经提交了特定报告 我必须检
  • 类似对象的 Javascript 函数,即“$”可以用作函数,例如$() 以及对象 $

    标题中的问题 我一直想知道并未能从 jQuery 源代码中找到答案 这是如何完成的 重申一下 在 jQuery 中 如何成为一个函数 例如 以及一个对象 我可以用一种方式或另一种方式创建它 就像这样 var function return
  • 引用硬币 Firebase 数据库将硬币倍增,直到应用程序崩溃

    我在我的应用程序中添加了推荐硬币系统 如果您将其推荐给某人 您将获得 100 个硬币 并且您使用的推荐代码是相同的 但问题是 当我运行应用程序并使用推荐代码硬币时 除非应用程序崩溃 否则推荐代码硬币会不断增加 两个帐户中的金币都应添加 10
  • 如何将 Content-Length、Content-Type 和 Last-Modified 添加到 HTTP 响应消息标头

    如何使用 net 将 Content Length Content Type 和 Last Modified 添加到 HttpResponseMessage 标头 添加这些字段后 我需要将所有这些值手动附加到响应中 我需要从服务器返回响应
  • 向jetty添加多个资源目录

    希望在 Jetty 中使用多个静态目录 当服务器运行时 http localhost 8282 A http localhost 8282 B http localhost 8282 C A 置于 X V A 中 B 置于 Q Z B 中
  • Cloud Run 是否需要 NGINX?

    我正在为我的博客和工作网站使用 Cloud Run 我真的很喜欢它 我已经根据 google 教程通过容器化部署了 python API 和 Vue Nuxt 应用程序 我不明白的一件事是为什么前面不需要 NGINX Use the off
  • 如何在Python中打印一个数字n次? [复制]

    这个问题在这里已经有答案了 如何在Python中打印一个数字n次 我可以像这样打印 A 5 次 print A 5 AAAAA 但不是 10 个 像这样 print 10 5 50 我想要的答案是10 10 10 10 10 我如何逃避数学
  • 将文件附加到存档而不读取/重写整个存档

    我有很多文件想要存储在一个存档文件中 我的第一个方法是将文件存储在压缩的 tarball 中 问题是 如果添加单个文件 我必须重写整个存档 我可以摆脱 gzip 压缩 但添加文件仍然很昂贵 您建议使用哪种其他存档格式来允许快速追加操作 Th
  • Laravel 迁移 - 创建时间戳时出现问题

    我正在尝试在我的 Laravel 实例上运行迁移 它们只是默认迁移 用户和密码重置 但是当它尝试创建时间戳时 它会抛出此错误 Illuminate Database QueryException SQLSTATE 42000 Syntax
  • 正则表达式中的可选字符

    任务非常简单 但我还没有想出一个好的解决方案 字符串可以包含数字 破折号和加号 或者仅包含数字 0 9 做了我需要的大部分工作 除了当用户输入像 这样的垃圾时 我在常规前瞻方面运气不佳 因为破折号和加号可能位于字符串中的任何位置 有效字符串
  • 来自 QDataStream 的 QT QString

    我正在使用缓冲区 并试图从中获取字符串 但不起作用 Example void myFunc QDataStream in quint8 v in gt gt v Ok I caught v value successfuly QString
  • 如何通过 grunt-contrib-uglify 按顺序缩小 js 文件?

    我有一个如下所示的目录 文件夹 b js 文件夹 jQuery js 文件夹 a js 文件夹 sub c js 我想将所有这些js文件缩小到一个js文件中in order jQuery js gt a js gt b js gt c js