1 | "use strict"; |
2 |
|
3 |
|
4 | let path = require('path');
|
5 | let fs = require('fs');
|
6 | const webpack = require("webpack");
|
7 | let cwd = process.cwd();
|
8 | let env = require("./utils/env");
|
9 | let _ = require('shelljs');
|
10 | const colors = require('colors');
|
11 | const { validate, config } = require('./options');
|
12 | const handleServer = require('./webpack/server/handleServer');
|
13 |
|
14 | global.__tua = {};
|
15 | const core = require('./core');
|
16 | const pageList = require('./listpage');
|
17 |
|
18 | let chmod777 = function () {
|
19 | if (process.platform !== "win32" && typeof process.getuid === 'function' && process.getuid() === 0) {
|
20 | _.chmod("-R", 777, path.resolve(cwd, './' + config.dist));
|
21 | if (fs.existsSync(path.resolve(cwd, './.cache-loader'))) {
|
22 | _.chmod("-R", 777, path.resolve(cwd, './.cache-loader'));
|
23 | }
|
24 | if (fs.existsSync(path.resolve(cwd, './node_modules/.cache/cache-loader'))) {
|
25 | _.chmod("-R", 777, path.resolve(cwd, './node_modules/.cache/cache-loader'));
|
26 | }
|
27 | }
|
28 | };
|
29 |
|
30 | module.exports = {
|
31 | |
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 | dll: function (stat, suc, fail) {
|
38 | core.initGenerate();
|
39 | validate();
|
40 | env.setEnv(stat.toUpperCase());
|
41 | let { chainWebpack } = require('./webpack/config.dll');
|
42 | let dllEntry = Object.keys(config.dll ? config.dll.chunks || {} : {});
|
43 | if (dllEntry.length === 0) {
|
44 | suc();
|
45 | return;
|
46 | }
|
47 | webpack(chainWebpack(), (err, stats) => {
|
48 | try {
|
49 | if (err) {
|
50 | console.error(colors.red(err));
|
51 | }
|
52 | if (err || stats.hasErrors()) {
|
53 |
|
54 | if (typeof fail === 'function') {
|
55 | fail(stats);
|
56 | console.error(colors.red(stats.compilation.errors));
|
57 | }
|
58 | } else {
|
59 |
|
60 | if (typeof suc === 'function') {
|
61 | suc(stats);
|
62 | }
|
63 | }
|
64 | chmod777();
|
65 | } catch (err) {
|
66 | console.error(colors.red(err.stack));
|
67 | }
|
68 | });
|
69 | },
|
70 | |
71 |
|
72 |
|
73 |
|
74 |
|
75 |
|
76 | start: async function (params, callback, serverType) {
|
77 | core.initGenerate();
|
78 | validate();
|
79 | env.setEnv("DEBUG");
|
80 | core.onBeforeCompile();
|
81 | let babelConf = require('./webpack/client/config');
|
82 | const webpackDevServer = require("./utils/startWebpackDevServer")(babelConf, serverType);
|
83 | let firstClientCompile = true;
|
84 | let firstServerCompile = true;
|
85 |
|
86 | let clientOk = new Promise((resolve, reject) => {
|
87 | webpackDevServer.compiler.hooks.done.tap('tuaClientCompile', stats => {
|
88 | let clientStats = stats;
|
89 | if (clientStats.hasErrors()) {
|
90 | global['clientCompileStats'] = clientStats;
|
91 | }
|
92 | if (firstClientCompile) {
|
93 | firstClientCompile = false;
|
94 | } else {
|
95 | global['clientUpdated'] = true;
|
96 | pageList.show(babelConf, webpackDevServer, serverType);
|
97 | }
|
98 | resolve();
|
99 | });
|
100 | });
|
101 |
|
102 | let serverOk = new Promise((resolve, reject) => {
|
103 | try {
|
104 | handleServer('debug', serverType, function (err, stats) {
|
105 | if (typeof callback === 'function') {
|
106 | callback(stats);
|
107 | }
|
108 | if (firstServerCompile) {
|
109 | firstServerCompile = false;
|
110 | } else {
|
111 | pageList.show(babelConf, webpackDevServer, serverType);
|
112 | }
|
113 | resolve();
|
114 | }, webpackDevServer, clientOk);
|
115 | } catch (err) {
|
116 | console.error(colors.red(err.stack));
|
117 | }
|
118 | });
|
119 |
|
120 | if (handleServer.noSsr()) {
|
121 | await Promise.all([clientOk]);
|
122 | } else {
|
123 | await Promise.all([clientOk, serverOk]);
|
124 | }
|
125 |
|
126 | pageList.show(babelConf, webpackDevServer, serverType);
|
127 |
|
128 | chmod777();
|
129 | },
|
130 | |
131 |
|
132 |
|
133 |
|
134 |
|
135 |
|
136 |
|
137 |
|
138 |
|
139 | pack: function (stat, params, suc, fail, ssuc, sfail) {
|
140 | core.initGenerate();
|
141 | validate();
|
142 | env.setEnv(stat || "PUBLISH");
|
143 | core.onBeforeCompile();
|
144 | let publishconf = require('./webpack/client/config');
|
145 | webpack(publishconf, (err, stats) => {
|
146 | try {
|
147 | if (err || stats.hasErrors()) {
|
148 | if (typeof fail === 'function') {
|
149 | fail(stats);
|
150 | console.error(colors.red(stats.compilation.errors));
|
151 | }
|
152 | } else {
|
153 |
|
154 | if (typeof suc === 'function') {
|
155 | suc(stats);
|
156 | }
|
157 | }
|
158 | chmod777();
|
159 |
|
160 | handleServer(stat, undefined, function (err, stats) {
|
161 | if (err || stats.hasErrors()) {
|
162 | if (typeof sfail === 'function') {
|
163 | sfail(stats);
|
164 | console.error(colors.red(stats.compilation.errors));
|
165 | }
|
166 | } else {
|
167 |
|
168 | if (typeof ssuc === 'function') {
|
169 | ssuc(stats);
|
170 | }
|
171 | }
|
172 | chmod777();
|
173 | });
|
174 | } catch (err) {
|
175 | console.error(colors.red(err.stack));
|
176 | }
|
177 | });
|
178 | } }; |
\ | No newline at end of file |