UNPKG

1.76 kBJavaScriptView Raw
1var fs = require('fs')
2var colors = require('chalk')
3
4var replace
5try {
6 replace = require('gulp-replace-task')
7} catch (error) {
8 console.error('Please install ' + colors.cyan('gulp-replace-task') + ' module, run:')
9 console.error('\nnpm install gulp-replace-task --save-dev\n')
10 throw error
11}
12
13function collection (manifest, name, type) {
14 var files
15 var original
16 var publicFile
17 var html = ''
18
19 var env = manifest.environment || process.env.NODE_ENV || 'local'
20 try {
21 files = manifest[name][env][type]
22 } catch (err) {
23 files = {}
24 }
25
26 for (var original in files) {
27 var path = files[original]
28 if (path.indexOf('//') >= 0) {
29 publicFile = path
30 } else {
31 publicFile = options['public'] + '/' + path
32 }
33
34 if (type === 'js') {
35 html += '<script defer src="' + publicFile + '"></script>' + '\n'
36 } else if (type === 'css') {
37 html += '<link rel="stylesheet" href="' + publicFile + '"/>' + '\n'
38 }
39 }
40 return html
41}
42
43function bassetHtmlInjector (options) {
44 var manifest
45 options.public = options.public || '/builds'
46 options.manifest = options.manifest || 'public/builds/manifest.json'
47
48 try {
49 manifest = JSON.parse(fs.readFileSync(options.manifest))
50 } catch (err) {}
51
52 if (! manifest) {
53 return
54 }
55
56 var patterns = []
57 for (var name in manifest) {
58 if (name == 'environment') {
59 continue
60 }
61 patterns.push({
62 match: new RegExp('<!--\\s*basset:' + name + ':css\\s*--\>'),
63 replacement: collection(manifest, name, 'css')
64 })
65 patterns.push({
66 match: new RegExp('<!--\\s*basset:' + name + ':js\\s*--\>'),
67 replacement: collection(manifest, name, 'js')
68 })
69 }
70
71 return replace({patterns: patterns})
72}
73
74module.exports = bassetHtmlInjector