我有一個問題,每次我修改我的代碼js時,我必須重新加載我的瀏覽器三次或四次以清除緩存。所以這很痛苦。版本控制軟件包文件
我正在尋找一個解決方案,如版本控制由吞噬生成的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']);
謝謝!
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'任務,所以你可能想在'gulp.watch()'被觸發之後立即調用你的'es6'任務而不是'inject'。但希望你能從我的答案中得到想法。 – MadScone