【发布时间】:2016-07-26 10:46:00
【问题描述】:
我有一个问题,每次我修改我的代码js,我必须重新加载我的浏览器三四次才能清除缓存。所以很痛苦。
我正在寻找一种解决方案,例如对由 gulp 生成的 bundle.js 进行版本控制。每次修改我的代码时,我都需要创建一个带有随机数的捆绑文件,例如 bundle-1287138.js 并且我的 index.html 中的脚本标签需要自动生成更新了。
<script src = "/dist/bundle-1287138.js"></script>
我该怎么办?
以下代码现在是我的 gulpfile.js:
var gulp = require('gulp');
var fs = require("fs");
var browserify = require("browserify");
var babelify = require("babelify");
var source = require('vinyl-source-stream');
var gutil = require('gulp-util');
gulp.task('es6', function() {
browserify({ debug: true })
.transform(babelify)
.require("./main.js", { entry: true })
.bundle()
.on('error',gutil.log)
.pipe(source('./dist/bundle.js'))
.pipe(gulp.dest('./'));
});
gulp.task('watch',function() {
gulp.watch(['app.jsx', 'main.js', './components/**/*.jsx'], ['es6'])
});
gulp.task('default', ['es6','watch']);
谢谢!
更新
正如 MadScone 所说,我使用 BrowserSync 并且效果很好。只有一个问题,保存后有延迟(8-9秒)。
这是我的文件夹结构:
- api
- frontend
- gulpfile.js
- index.js
在 index.js 中,我使用 BrowserSync:
var express = require('express');
var app = express();
var browserSync = require('browser-sync');
var bs = browserSync({ logSnippet: false });
bs.watch("frontend/dist/bundle.js", function() {
var curr = new Date();
console.log("changed " + curr.getHours() + ":" + curr.getMinutes() + ":" + curr.getSeconds());
bs.reload();
});
app.use(require('connect-browser-sync')(bs));
app.use('/', express.static(path.join(__dirname, 'frontend')));
var server = app.listen(3000, function () {
console.log('Server running at http://127.0.0.1:3000/');
});
在 gulpfile.js 中,我正在使用 gulp 构建我的 bundle.js:
var gulp = require('gulp');
var fs = require("fs");
var browserify = require("browserify");
var babelify = require("babelify");
var source = require('vinyl-source-stream');
var gutil = require('gulp-util');
gulp.task('es6', function() {
browserify({ debug: true })
.transform(babelify)
.require("./main.js", { entry: true })
.bundle()
.on('error',gutil.log)
.pipe(source('./dist/bundle.js'))
.pipe(gulp.dest('./'));
});
gulp.task('watch',function() {
gulp.watch(['app.jsx', 'main.js', './components/**/*.jsx'], ['es6'])
});
gulp.task('default', ['es6', 'watch']);
当我修改并保存我的代码时,gulp es6 任务会重新生成 bundle.js 并生成以下日志:
[23:49:54] Starting 'es6'...
[23:49:54] Finished 'es6' after 6 ms
由于 bundle.js 文件已更改,因此 BrowserSync 工作但 5 秒后...
changed 23:49:59
[BS] Reloading Browsers...
您能否解释一下为什么它没有在 es6 任务之后立即重新加载。
谢谢!
【问题讨论】:
标签: javascript reactjs gulp bundle babeljs