Ich habe ein Problem, dass jedes Mal, wenn ich meinen Code js ändern, ich meinen Browser drei oder vier Mal neu laden muss, um den Cache zu löschen. Es ist also schmerzhaft.Versionierung Bundle-Datei
Ich bin auf der Suche nach einer Lösung wie Versionierung der Bundle.js, die von Schluck erzeugt wird. Jedes Mal, wenn mein Code geändert wird, muss ich eine Bundle-Datei mit einer Zufallszahl wie bundle-1287138.js erstellen und das Skript-Tag in meinem index.html muss automatisch aktualisiert werden.
<script src = "/dist/bundle-1287138.js"></script>
Wie könnte ich tun?
Der folgende Code ist mein gulpfile.js jetzt:
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']);
Thank you!
UPDATE
Wie MadScone sagen, ich benutze BrowserSync und es funktioniert super. Nur ein Problem, es hat eine Verzögerung (8 - 9 Sekunden) nach dem Speichern.
Dies ist meine Ordnerstruktur:
- api
- frontend
- gulpfile.js
- index.js
In index.js, ich benutze 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/');
});
Und in gulpfile.js, ich schluck bin mit bauen mein 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']);
Wenn ich meinen Code ändern und speichern, regeneriert die schluck es6 Aufgabe die bundle.js und die folgende Protokoll machen:
[23:49:54] Starting 'es6'...
[23:49:54] Finished 'es6' after 6 ms
Da die bundle.js Datei geändert wird, so BrowserSync macht seinen arbeiten, aber 5 Sekunden später ...
changed 23:49:59
[BS] Reloading Browsers...
Könnten Sie bitte erklären, warum es richtig nachladen nicht nach der es6 Aufgabe.
Vielen Dank!
Ich benutze BrowserSync, du hast Recht, es ist besser. Aber es hat ein Problem und ich weiß nicht warum. Könnten Sie sich bitte mein Update ansehen? Danke –
@TrongLamPhan Ich habe meine Antwort bearbeitet. Ich bin mir nicht ganz sicher, ob Sie die 'inject' Aufgabe noch brauchen, also möchten Sie vielleicht Ihre' es6' Aufgabe jetzt anstelle von 'inject' aufrufen, nachdem' gulp.watch() 'ausgelöst wurde. Aber hoffentlich bekommst du die Idee von meiner Antwort trotzdem. – MadScone