好吧,我对 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.js
和 after.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/