gulp useref无法使用多个html文件

时间:2016-03-23 11:46:52

标签: javascript html node.js gulp gulp-useref

我的项目中有5个HTML文件,每个底部都有一个useref块,如下所示:

<!-- build:js static/js/main.js -->
<script src="static/js/plugins.js"></script>
<!-- endbuild -->

所有5个文件中的Common 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.task('compress:js:html', ['clear:dist'], function () {
    return gulp.src('./*.html')
        .pipe(useref())
        .pipe(htmlmin({collapseWhitespace: true}))
        .pipe(gulp.dest('./dist/'))
});

1 个答案:

答案 0 :(得分:2)

所有HTML文件都为连接文件(static/js/main.js)指定了相同的位置,但它们都指定了应该连接的不同源文件。根据处理HTML文件的顺序,最终会得到不同的static/js/main.js。在你的情况下,你的第一个例子。

您有两种选择:

  1. 对于每个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 -->
    

    这将减少浏览器为每个页面提出的请求数量,但不会利用浏览器缓存。

  2. 请参阅每个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文件,因此只需下载一次。