Skip to content

Commit fa3503d

Browse files
committed
faster development public versions, asset versions
1 parent d20b566 commit fa3503d

12 files changed

Lines changed: 263 additions & 276 deletions

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
Thumbs.db
2424

2525
# generated content
26-
public.md5.json
26+
public.versions.json
2727

2828
# NPM packages folder.
2929
node_modules/

client/head/fontTest.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
Можно убрать класс .no-icons и показать иконки.
1212
*/
1313

14+
1415
module.exports = function() {
1516
var elem = document.createElement('span');
1617
document.body.appendChild(elem);

gulpfile.js

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ const path = require('path');
88
const fs = require('fs');
99
const assert = require('assert');
1010
const runSequence = require('run-sequence');
11-
const gulpWatcher = require('./tasks/gulpWatcher');
1211

1312
//Error.stackTraceLimit = Infinity;
1413
//require('trace');
@@ -20,25 +19,12 @@ process.on('uncaughtException', function(err) {
2019
process.exit(255);
2120
});
2221

23-
gulp.executing = [];
24-
25-
gulp.on('task_start', function(msg) {
26-
gulp.executing.push(msg.task);
27-
});
28-
29-
gulp.on('task_stop', function(msg) {
30-
gulp.executing.splice(gulp.executing.indexOf(msg.task), 1);
31-
// console.log(gulp.executing.join(','));
32-
});
33-
34-
3522
const jsSources = [
3623
'hmvc/**/*.js', 'modules/**/*.js', 'tasks/**/*.js', '*.js'
3724
];
3825

3926
function lazyRequireTask(path) {
4027
var args = [].slice.call(arguments, 1);
41-
4228
return function(callback) {
4329
var task = require(path).apply(this, args);
4430
return task(callback);
@@ -62,18 +48,39 @@ gulp.task("client:livereload", lazyRequireTask("./tasks/livereload", { watch: "p
6248

6349
gulp.task('link-modules', lazyRequireTask('./tasks/linkModules', { src: ['client', 'modules/*', 'hmvc/*'] }));
6450

65-
gulp.task('watch', function(callback) {
66-
gulpWatcher({ root: __dirname });
67-
});
68-
51+
gulp.task('watch', lazyRequireTask('./tasks/watch', {
52+
root: __dirname,
53+
taskMapping: [
54+
{
55+
watch: 'assets/{fonts,img}/**',
56+
task: 'client:sync-resources'
57+
},
58+
{
59+
watch: 'styles/**/*.{png,svg,gif,jpg}',
60+
task: 'client:sync-css-images'
61+
},
62+
{
63+
watch: "styles/**/*.styl",
64+
task: 'client:compile-css'
65+
},
66+
{
67+
watch: ['client/**', 'hmvc/**/client/**'],
68+
task: "client:browserify"
69+
},
70+
{
71+
watch: 'public/{fonts,js,styles}/**',
72+
task: 'client:build-public-versions'
73+
}
74+
]
75+
}));
6976

70-
gulp.task("client:sync-resources-once", lazyRequireTask('./tasks/syncResources', {
77+
gulp.task("client:sync-resources", lazyRequireTask('./tasks/syncResources', {
7178
'assets/fonts': 'public/fonts',
7279
'assets/img': 'public/img'
7380
}));
7481

7582

76-
gulp.task("client:sync-css-images-once", lazyRequireTask('./tasks/syncCssImages', {
83+
gulp.task("client:sync-css-images", lazyRequireTask('./tasks/syncCssImages', {
7784
src: 'styles/**/*.{png,svg,gif,jpg}',
7885
dst: 'public/i'
7986
}));
@@ -86,7 +93,7 @@ gulp.task('client:clean-compiled-css', function(callback) {
8693
});
8794

8895
// Show errors if encountered
89-
gulp.task('client:compile-css-once',
96+
gulp.task('client:compile-css',
9097
['client:clean-compiled-css'],
9198
lazyRequireTask('./tasks/compileCss', {
9299
src: './styles/base.styl',
@@ -100,15 +107,15 @@ gulp.task('client:minify', lazyRequireTask('./tasks/minify', {
100107

101108
gulp.task("client:browserify:clean", lazyRequireTask('./tasks/browserifyClean', { dst: './public/js'}));
102109

103-
gulp.task("client:browserify-once", ['client:browserify:clean'], lazyRequireTask('./tasks/browserify'));
110+
gulp.task("client:browserify", ['client:browserify:clean'], lazyRequireTask('./tasks/browserify'));
104111

105-
// we depend on compile-css, because if build-md5-list-once works in parallel with client:compile-css,
106-
// then compile-css recreates files and build-md5-list-once misses them or errors when they are suddenly removed
107-
gulp.task("client:build-md5-list-once",
108-
lazyRequireTask('./tasks/buildMd5List', { cwd: 'public', src: './{fonts,js,styles}/**/*.*', dst: './public.md5.json' }));
112+
// we depend on compile-css, because if build-md5-list works in parallel with client:compile-css,
113+
// then compile-css recreates files and build-md5-list misses them or errors when they are suddenly removed
114+
gulp.task("client:build-public-versions",
115+
lazyRequireTask('./tasks/buildPublicVersions', { cwd: 'public', src: './{fonts,js,styles}/**/*.*', dst: './public.versions.json' }));
109116

110117
gulp.task('build', function(callback) {
111-
runSequence('link-modules', "client:sync-resources-once", 'client:compile-css-once', 'client:browserify-once', 'client:sync-css-images-once', 'client:build-md5-list-once', callback);
118+
runSequence('link-modules', "client:sync-resources", 'client:compile-css', 'client:browserify', 'client:sync-css-images', 'client:build-public-versions', callback);
112119
});
113120

114121
gulp.task('dev', function(callback) {

modules/setup/render.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@ const _ = require('lodash');
1212
const assert = require('assert');
1313
const JadeParserMultipleDirs = require('lib/jadeParserMultipleDirs');
1414

15-
// public.md5.json is regenerated and THEN node is restarted on redeploy
15+
// public.versions.json is regenerated and THEN node is restarted on redeploy
1616
// so it loads a new version.
17-
var publicMd5;
17+
var publicVersions;
1818

19-
function getPublicMd5(publicPath) {
20-
if (!publicMd5) {
19+
function getPublicVersion(publicPath) {
20+
if (!publicVersions) {
2121
// don't include at module top, let the generating task to finish
22-
publicMd5 = require(path.join(config.projectRoot, 'public.md5.json'));
22+
publicVersions = require(path.join(config.projectRoot, 'public.versions.json'));
2323
}
2424
var busterPath = publicPath.slice(1);
25-
return publicMd5[busterPath];
25+
return publicVersions[busterPath];
2626
}
2727

2828
function addStandardHelpers(locals, ctx) {
@@ -76,7 +76,7 @@ function addStandardHelpers(locals, ctx) {
7676
if (publicPath[0] != '/') {
7777
throw new Error("addAssetVersion needs an /absolute/path");
7878
}
79-
var md5 = getPublicMd5(publicPath);
79+
var md5 = getPublicVersion(publicPath);
8080
if (!md5) {
8181
throw new Error("No md5 for " + publicPath);
8282
}

modules/stylusAsset.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@ var fs = require('fs'),
44
nodes = require('stylus').nodes,
55
utils = require('stylus').utils;
66

7-
module.exports = function() {
7+
module.exports = function(options) {
8+
9+
var getVersion = options.getVersion || function(file) {
10+
var buf = fs.readFileSync(file);
11+
return crypto.createHash('md5').update(buf).digest('hex').substring(0, 8);
12+
};
13+
814
return function(style) {
915
var paths = style.options.paths || [];
1016

@@ -19,13 +25,7 @@ module.exports = function() {
1925
throw new Error('File ' + literal + ' not be found');
2026
}
2127

22-
var version;
23-
if (process.env.NODE_ENV == 'development') {
24-
version = fs.statSync(file).mtime.getTime();
25-
} else {
26-
var buf = fs.readFileSync(file);
27-
version = crypto.createHash('md5').update(buf).digest('hex').substring(0, 8);
28-
}
28+
var version = getVersion(file);
2929

3030
var ext = path.extname(url.val);
3131
var filepath = url.val.slice(0, url.val.length - ext.length);

0 commit comments

Comments
 (0)