У меня проблема: каждый раз, когда я изменяю свой код js, я должен перезагрузить мой браузер три или четыре раза, чтобы очистить кеш. Так что это больно.Файл с пакетом версий
Я ищу решение, такое как versioning bundle.js, которое генерируется gulp. Каждый раз, когда мой код изменяется, мне нужно создать файл пакета со случайным числом, например 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']);
Спасибо!
UPDATE
Как 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, я использую глотка, чтобы построить мой 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']);
Когда я изменить и сохранить свой код, задача глотком 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.
Спасибо!
Я использую BrowserSync, вы правы, это лучше. Но это проблема, и я не знаю, почему. Не могли бы вы посмотреть мое обновление? Спасибо –
@TrongLamPhan Я отредактировал свой ответ. Я не совсем уверен, что вам все еще нужно задание 'inject', поэтому вы можете вместо этого выполнить вызов' es6' вместо 'inject' после запуска' gulp.watch() '. Но, надеюсь, вы получите идею от моего ответа в любом случае. – MadScone