javascript - 如何将全局/公共(public)变量添加到 grunt-contrib-uglify 输出

标签 javascript node.js gruntjs npm grunt-contrib-uglify

好吧,我对 Grunt 和 Node.js 还很陌生。我正在构建一个网站,并发现“main.js”文件变得太大了。因此,我将其拆分,现在尝试使用 Grunt 将所有这些 JS 文件重新组合在一起。

我遇到的问题是,我需要为所有这些 JS 文件中的所有各种函数提供一些全局变量。更具体地说,我们网站上的每个页面都通过 body 标记中的 id 进行标识:

<body id="home">

其中许多 JS 文件包含 if 语句,确保某些函数仅在加载适当的页面时运行。例如:

if (page == 'home') {
    var title = "Home Page"
    $('.page-title').text(title);
}

注意到page变量了吗?我需要让那个人对所有这些文件可用(在 grunt-contrib-uglify 将它们合并在一起之后)。因此,我想我应该分配一个新的“唯一”变量名称,并将其设为全局变量。

我注意到grunt-contrib-uglify有一个'wrap ' 其文档中列出的选项。但是,没有给出如何使用它的示例。

谁能告诉我: - 如何使用“grunt-contrib-uglify”中的“wrap”选项 - 这是否是适合我想做的事情的 grunt 插件?

我的一个想法(作为最后的手段)是创建一个 before.jsafter.js 并分别放置我的内容的开头和结尾希望环绕每个文件中的其他文件。但是,我认为“换行”选项正是我所需要的,是吗?

更新:这是我的“合并”JS 文件的链接: main.js

以及我的 Gruntfile 的链接: Gruntfile.js

最佳答案

我也遇到了同样的问题,正在寻找解决方案。但我想我找到了答案。

在你的 grunt 文件中使用它:

uglify: {
  options: {
    wrap: true
  }
}

wrap 属性的文档表明变量将在全局变量中可用,并且查看生成的代码似乎确实如此。将字符串值传递给参数似乎确实创建了一个具有该名称的全局变量。

但是,wrap: true 似乎使所有对象和属性在全局范围内可用。因此,您可以只使用 page.title,而不是 globals.page.title (无论如何,我无法开始工作)。非常非常容易和简单。

如果这适合您的目的,我建议您这样做。

关于javascript - 如何将全局/公共(public)变量添加到 grunt-contrib-uglify 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29615324/

相关文章:

javascript - 如何在 Ionic 中将文本转换为 html 对象

javascript - 在 AngularJs 中选中的 radio 旁边的标签添加颜色

javascript - 是否可以使用 getDisplayMedia() 禁用光标记录

javascript - 我的代码中出现循环复杂度错误

javascript - 使用 grunt 从 browserify 生成源映射

javascript - 未捕获的类型错误 : undefined is not a function when using highcharts

node.js - yarn 错误 "EACCESS: permission denied, scandir '/home/ubuntu/.config/yarn/link'"

javascript - Ember 查找记录并包含

javascript - GruntJS 可配置首次运行

javascript - 如何通过 Electron 应用程序执行命令