| 
									
										
										
										
											2012-04-05 20:59:01 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2017-07-27 19:24:56 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2012-04-05 20:59:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-27 19:24:56 +08:00
										 |  |  | const cp = require("child_process"); | 
					
						
							|  |  |  | const path = require("path"); | 
					
						
							|  |  |  | const tc = require("./template-common"); | 
					
						
							|  |  |  | const fs = require("fs"); | 
					
						
							| 
									
										
										
										
											2018-02-11 12:27:09 +08:00
										 |  |  | const async = require("neo-async"); | 
					
						
							| 
									
										
										
										
											2012-04-05 20:59:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-27 19:24:56 +08:00
										 |  |  | const extraArgs = ""; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-05 04:39:29 +08:00
										 |  |  | const targetArgs = global.NO_TARGET_ARGS ? "" : " ./example.js -o dist/output.js "; | 
					
						
							| 
									
										
										
										
											2017-07-27 19:24:56 +08:00
										 |  |  | const displayReasons = global.NO_REASONS ? "" : " --display-reasons --display-used-exports --display-provided-exports"; | 
					
						
							| 
									
										
										
										
											2018-01-05 04:39:29 +08:00
										 |  |  | const commonArgs = `--display-chunks --display-max-modules 99999 --display-origins --display-entrypoints --output-public-path "dist/" ${extraArgs} ${targetArgs}`; | 
					
						
							| 
									
										
										
										
											2017-12-14 17:09:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | let readme = fs.readFileSync(require("path").join(process.cwd(), "template.md"), "utf-8"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const doCompileAndReplace = (args, prefix, callback) => { | 
					
						
							| 
									
										
										
										
											2019-03-31 22:17:22 +08:00
										 |  |  | 	if (!tc.needResults(readme, prefix)) { | 
					
						
							| 
									
										
										
										
											2017-12-14 17:09:09 +08:00
										 |  |  | 		callback(); | 
					
						
							|  |  |  | 		return; | 
					
						
							| 
									
										
										
										
											2017-06-05 22:12:12 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-03-31 22:17:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	const deleteFiles = (dir) => { | 
					
						
							|  |  |  | 		const targetDir = path.resolve("dist", dir); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (path.extname(targetDir) === "") { | 
					
						
							|  |  |  | 			fs.readdirSync(targetDir).forEach((file) => { | 
					
						
							|  |  |  | 				deleteFiles(path.join(targetDir, file)); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			fs.unlinkSync(targetDir); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (fs.existsSync("dist")) { | 
					
						
							|  |  |  | 		for (const dir of fs.readdirSync("dist")) { | 
					
						
							|  |  |  | 			deleteFiles(dir); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-04-04 04:26:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	try { | 
					
						
							|  |  |  | 		require.resolve("webpack-cli"); | 
					
						
							|  |  |  | 	} catch (e) { | 
					
						
							|  |  |  | 		throw new Error("Please install webpack-cli at root."); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-14 17:09:09 +08:00
										 |  |  | 	cp.exec(`node ${path.resolve(__dirname, "../bin/webpack.js")} ${args} ${displayReasons} ${commonArgs}`, (error, stdout, stderr) => { | 
					
						
							| 
									
										
										
										
											2019-03-31 22:17:22 +08:00
										 |  |  | 		if (stderr) | 
					
						
							| 
									
										
										
										
											2012-04-05 20:59:01 +08:00
										 |  |  | 			console.log(stderr); | 
					
						
							| 
									
										
										
										
											2019-03-31 22:17:22 +08:00
										 |  |  | 		if (error !== null) | 
					
						
							| 
									
										
										
										
											2012-04-05 20:59:01 +08:00
										 |  |  | 			console.log(error); | 
					
						
							| 
									
										
										
										
											2017-12-14 17:09:09 +08:00
										 |  |  | 		try { | 
					
						
							|  |  |  | 			readme = tc.replaceResults(readme, process.cwd(), stdout.replace(/[\r?\n]*$/, ""), prefix); | 
					
						
							| 
									
										
										
										
											2019-03-31 22:17:22 +08:00
										 |  |  | 		} catch (e) { | 
					
						
							| 
									
										
										
										
											2017-12-14 17:09:09 +08:00
										 |  |  | 			console.log(stderr); | 
					
						
							|  |  |  | 			throw e; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		callback(); | 
					
						
							| 
									
										
										
										
											2012-04-05 20:59:01 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-12-14 17:09:09 +08:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | async.series([ | 
					
						
							| 
									
										
										
										
											2018-10-10 15:54:13 +08:00
										 |  |  | 	callback => doCompileAndReplace("--mode production --env production", "production", callback), | 
					
						
							|  |  |  | 	callback => doCompileAndReplace("--mode development --env development --devtool none", "development", callback), | 
					
						
							|  |  |  | 	callback => doCompileAndReplace("--mode none --env none --output-pathinfo", "", callback) | 
					
						
							| 
									
										
										
										
											2017-12-14 17:09:09 +08:00
										 |  |  | ], () => { | 
					
						
							|  |  |  | 	readme = tc.replaceBase(readme); | 
					
						
							| 
									
										
										
										
											2019-03-31 22:17:22 +08:00
										 |  |  | 	fs.writeFile("README.md", readme, "utf-8", function () { }); | 
					
						
							| 
									
										
										
										
											2017-06-05 22:12:12 +08:00
										 |  |  | }); |