1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | const path = require('path');
|
8 | const fs = require('fs');
|
9 | const shelljs = require('shelljs');
|
10 | const escapeStringRegexp = require('escape-string-regexp');
|
11 |
|
12 |
|
13 | const logger = require('jdf-log');
|
14 | const jdf = require('./jdf.js');
|
15 | const urlReplace = require('./urlReplace');
|
16 | const cssSprite = require('./cssSprite');
|
17 | const base64 = require('./base64');
|
18 | const compressScheduler = require('./compresser/compressScheduler');
|
19 | const buildCss = require('./buildCss');
|
20 | const buildHTML = require('./buildHTML');
|
21 | const buildHTMLDeep = require('./buildHTMLDeep');
|
22 | const buildOutputWidget = require('./buildOutputWidget');
|
23 | const buildES6 = require('./buildES6');
|
24 | const VFS = require('./VFS/VirtualFileSystem');
|
25 | const pluginCore = require('./pluginCore');
|
26 |
|
27 | module.exports.init = function (options) {
|
28 | var outputType = options.outputType;
|
29 |
|
30 |
|
31 | pluginCore.addPluginFromConfiguration();
|
32 |
|
33 | return Promise.resolve()
|
34 | .then(() => {
|
35 | logger.profile('plugin.beforeBuild');
|
36 | return pluginCore.excuteBeforeBuild();
|
37 | })
|
38 | .then(() => {
|
39 | logger.profile('plugin.beforeBuild');
|
40 | return buildCss.init(options);
|
41 | })
|
42 | .then(() => {
|
43 | if (jdf.config.widgetNesting) {
|
44 | return buildHTMLDeep.init(options);
|
45 | } else {
|
46 | return buildHTML.init(options);
|
47 | }
|
48 | })
|
49 | .then(() => {
|
50 | buildES6.init();
|
51 | })
|
52 | .then(() => {
|
53 | if (jdf.config.output.base64) {
|
54 | return base64.init();
|
55 | }
|
56 | })
|
57 | .then(() => {
|
58 | if (jdf.config.output.cssSprite) {
|
59 | cssSprite.init();
|
60 | }
|
61 | })
|
62 | .then(() => {
|
63 | return buildOutputWidget.init(options);
|
64 | })
|
65 | .then(() => {
|
66 | return urlReplace.init(options);
|
67 | })
|
68 | .then(() => {
|
69 | logger.profile('plugin.afterBuild');
|
70 | return pluginCore.excuteAfterBuild();
|
71 | })
|
72 | .then(() => {
|
73 | logger.profile('plugin.afterBuild');
|
74 |
|
75 | logger.profile('delete build files');
|
76 | shelljs.rm('-rf', jdf.outputDir);
|
77 | logger.profile('delete build files');
|
78 | })
|
79 | .then(() => {
|
80 | logger.profile('filter files');
|
81 | let outputList = options.outputList;
|
82 | if (!outputList || outputList.length === 0) {
|
83 | return;
|
84 | }
|
85 |
|
86 | var filterPath = [];
|
87 | return VFS.travel(vfile => {
|
88 | let filepath = path.relative(VFS.originDir, vfile.originPath);
|
89 | filepath = path.normalize(filepath);
|
90 | let notFiltered = false;
|
91 | for (let pattern of outputList) {
|
92 | pattern = path.normalize(pattern);
|
93 | let relativepath = path.relative(pattern, filepath);
|
94 | let reg = new RegExp('^' + escapeStringRegexp('..' + path.sep));
|
95 | if (!reg.test(relativepath)) {
|
96 | notFiltered = true;
|
97 | }
|
98 | }
|
99 | if (!notFiltered) {
|
100 | filterPath.push(vfile.originPath);
|
101 | }
|
102 | }).then(()=> {
|
103 | filterPath.forEach(filepath => {
|
104 | VFS.deleteFile(filepath);
|
105 | });
|
106 | });
|
107 | })
|
108 | .then(() => {
|
109 | logger.profile('filter files');
|
110 |
|
111 | if(outputType !== 'debug' && outputType !== 'plain'){
|
112 | logger.profile('delete temp files');
|
113 | shelljs.rm("-Rf", jdf.transferDir);
|
114 | logger.profile('delete temp files');
|
115 |
|
116 | return VFS.writeFilesToDir(jdf.transferDir).then(() => {
|
117 | return compressScheduler.init(jdf.transferDir, jdf.outputDir);
|
118 | });
|
119 |
|
120 | }else{
|
121 | return VFS.writeFiles();
|
122 | }
|
123 | })
|
124 | .then(() => {
|
125 | logger.info('output success');
|
126 | })
|
127 | .catch(err => {
|
128 | logger.error(err);
|
129 | });
|
130 | }
|