1 | var fs = require('fs')
|
2 | var colors = require('chalk')
|
3 |
|
4 | var replace
|
5 | try {
|
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 |
|
13 | function 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 |
|
43 | function 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 |
|
74 | module.exports = bassetHtmlInjector
|