NodeJS 使用gulp在页面上临时添加脚本

oyxsuwqo  于 2023-05-17  发布在  Node.js
关注(0)|答案(1)|浏览(134)

我目前正在做一个gulp项目,我有这个gulpfile.js

var config = require('./config.json'),
    gulp = require('gulp'),
    watch = require('gulp-watch'),
    connect = require('gulp-connect'),
    runSequence = require('run-sequence');

gulp.task('server', function() {
    connect.server({
        root: './',
        port: config.port,
        livereload: true
    });
});

gulp.task('html', function() {
    gulp.src('./' + config.creatives + '/**/*.html')
        .pipe(connect.reload());
});

gulp.task('watch', function() {
    gulp.watch(['./' + config.creatives + '/**/*.html'], ['html']);
    gulp.watch(['./' + config.creatives + '/**/*.css'], ['html']);
});

gulp.task('default', function() {
    return runSequence('server', ['html', 'watch']);
});

config.json内容是

{
    "port" : "2727",
    "creatives" : "creatives"
}

我的问题是如何将临时脚本文件添加到当前正在查看的页面?我看到connect-livereload正在页面底部添加livereload.js &我也想这样做。先谢谢你了。

---更新--- 14-03-2017 ---

我用下面的代码更新了gulpfile.js服务器,但是test.js被永久地注入到文件中。

gulp.task('server', function() {
    connect.server({
        ...
        livereload: true,
        middleware: function(connect, option) {
            return [
                function(req, res, next) {
                    var file, path;
                    if (req.url.indexOf('preview') > -1) {
                        file = req.url;
                        path = file.replace('index.html', '')
                        gulp.src('./' + file)
                            .pipe(insertLines({
                                'before': /<\/body>$/,
                                'lineBefore': '<script type="text/javascript" src="test.js"></script>'
                            }))
                            .pipe(gulp.dest('./' + path));
                    }
                    next();
                }
            ]
        }
    });
});

我只需要在服务器启动时添加test.js &在服务器结束时删除if。

1wnzp6jl

1wnzp6jl1#

我通过使用gulp编辑模块本身来解决这个问题。
不确定这是否正确,但对我来说,这很好(目前)。

解决方案

我创建了一个update-module.js文件,并有以下脚本:

var gulp = require('gulp'),
    tap = require('gulp-tap'),
    rename = require('gulp-rename');

gulp.task('default', function() {
    return gulp.src('./node_modules/connect-livereload/index.js')
        .pipe(rename('~index.js'))
        .pipe(gulp.dest('./node_modules/connect-livereload/'))
        .pipe(tap(function(file, callback) {
            var newFile = file.contents.toString(),
                oldText = 'return \'<script src="\' + src + \'" async="" defer=""></script>\'',
                newtext = 'return \'<script src="\' + src + \'" async="" defer=""></script><script src="http://localhost:3000/temp.js" ></script>\'';
                newContents = newFile.replace(oldText, newtext);
            file.contents = new Buffer(newContents);
            return file;
        }))
        .pipe(rename('index.js'))
        .pipe(gulp.dest('./node_modules/connect-livereload/'));
});

我通过在终端上键入gulp --gulpfile ./update-module.js运行此脚本一次。
它所做的是查找connect-livereload模块并复制index.js,将其重命名为~index.js(用于备份),然后修改index.js以包含我的临时脚本(temp.js)并将其保存在与index.js相同的位置。

相关问题