gulp userref 无法处理多个 html 文件
gulp useref not working with multiple html files
我的项目中有 5 个 HTML 文件,每个文件的底部都有一个 userref 块,如下所示:
<!-- build:js static/js/main.js -->
<script src="static/js/plugins.js"></script>
<!-- endbuild -->
5个文件中共同的JS文件是plugins.js。我需要在每个 HTML 文件中使用该 JS 文件,并在我的所有文件中重复该文件。
我的第二个 HTML 文件有这个块(plugins.js 在那里):
<!-- build:js static/js/main.js -->
<script src="static/js/jquery.barrating.min.js"></script>
<script src="static/js/plugins.js"></script>
<!-- endbuild -->
我的第五个 HTML 文件有这个块:
<!-- build:js static/js/main.js -->
<script src="static/js/jquery.matchHeight-min.js"></script>
<script src="static/js/jquery.barrating.min.js"></script>
<script src="static/js/plugins.js"></script>
<!-- endbuild -->
所以在每个文件中我都使用 plugins.js 并且在一些文件中我使用其他一些库。但是当我 运行 任务时,这三个文件并没有连接成 main.js。 main.js 中只有来自 plugins.js 的内容。其他库未包含在 main.js 中。
为什么?我什至可以像这样使用这个插件吗?
我的gulp任务:
gulp.task('compress:js:html', ['clear:dist'], function () {
return gulp.src('./*.html')
.pipe(useref())
.pipe(htmlmin({collapseWhitespace: true}))
.pipe(gulp.dest('./dist/'))
});
所有 HTML 文件都为串联文件 (static/js/main.js
) 指定了相同的位置,但它们都指定了应该串联的不同源文件。根据处理您的 HTML 文件的顺序,您最终会得到不同的 static/js/main.js
。在您的情况下,您的第一个示例中的那个。
您有两个选择:
为每个 HTML 文件指定连接文件的不同位置:
HTML 文件 1:
<!-- build:js static/js/main1.js -->
<script src="static/js/plugins.js"></script>
<!-- endbuild -->
HTML 文件 2:
<!-- build:js static/js/main2.js -->
<script src="static/js/jquery.barrating.min.js"></script>
<script src="static/js/plugins.js"></script>
<!-- endbuild -->
HTML 文件 3:
<!-- build:js static/js/main3.js -->
<script src="static/js/jquery.matchHeight-min.js"></script>
<script src="static/js/jquery.barrating.min.js"></script>
<script src="static/js/plugins.js"></script>
<!-- endbuild -->
这将减少浏览器必须为每个页面发出的请求数,但不会利用浏览器缓存。
在每个HTML文件中参考所有个JS文件,无论您是否需要该特定页面的JS文件。这意味着您的所有三个 HTML 文件中都有以下内容:
<!-- build:js static/js/main.js -->
<script src="static/js/jquery.matchHeight-min.js"></script>
<script src="static/js/jquery.barrating.min.js"></script>
<script src="static/js/plugins.js"></script>
<!-- endbuild -->
由于浏览器会缓存生成的 main.js
文件,因此只需下载一次。
我的项目中有 5 个 HTML 文件,每个文件的底部都有一个 userref 块,如下所示:
<!-- build:js static/js/main.js -->
<script src="static/js/plugins.js"></script>
<!-- endbuild -->
5个文件中共同的JS文件是plugins.js。我需要在每个 HTML 文件中使用该 JS 文件,并在我的所有文件中重复该文件。 我的第二个 HTML 文件有这个块(plugins.js 在那里):
<!-- build:js static/js/main.js -->
<script src="static/js/jquery.barrating.min.js"></script>
<script src="static/js/plugins.js"></script>
<!-- endbuild -->
我的第五个 HTML 文件有这个块:
<!-- build:js static/js/main.js -->
<script src="static/js/jquery.matchHeight-min.js"></script>
<script src="static/js/jquery.barrating.min.js"></script>
<script src="static/js/plugins.js"></script>
<!-- endbuild -->
所以在每个文件中我都使用 plugins.js 并且在一些文件中我使用其他一些库。但是当我 运行 任务时,这三个文件并没有连接成 main.js。 main.js 中只有来自 plugins.js 的内容。其他库未包含在 main.js 中。 为什么?我什至可以像这样使用这个插件吗?
我的gulp任务:
gulp.task('compress:js:html', ['clear:dist'], function () {
return gulp.src('./*.html')
.pipe(useref())
.pipe(htmlmin({collapseWhitespace: true}))
.pipe(gulp.dest('./dist/'))
});
所有 HTML 文件都为串联文件 (static/js/main.js
) 指定了相同的位置,但它们都指定了应该串联的不同源文件。根据处理您的 HTML 文件的顺序,您最终会得到不同的 static/js/main.js
。在您的情况下,您的第一个示例中的那个。
您有两个选择:
为每个 HTML 文件指定连接文件的不同位置:
HTML 文件 1:
<!-- build:js static/js/main1.js --> <script src="static/js/plugins.js"></script> <!-- endbuild -->
HTML 文件 2:
<!-- build:js static/js/main2.js --> <script src="static/js/jquery.barrating.min.js"></script> <script src="static/js/plugins.js"></script> <!-- endbuild -->
HTML 文件 3:
<!-- build:js static/js/main3.js --> <script src="static/js/jquery.matchHeight-min.js"></script> <script src="static/js/jquery.barrating.min.js"></script> <script src="static/js/plugins.js"></script> <!-- endbuild -->
这将减少浏览器必须为每个页面发出的请求数,但不会利用浏览器缓存。
在每个HTML文件中参考所有个JS文件,无论您是否需要该特定页面的JS文件。这意味着您的所有三个 HTML 文件中都有以下内容:
<!-- build:js static/js/main.js --> <script src="static/js/jquery.matchHeight-min.js"></script> <script src="static/js/jquery.barrating.min.js"></script> <script src="static/js/plugins.js"></script> <!-- endbuild -->
由于浏览器会缓存生成的
main.js
文件,因此只需下载一次。