This repository has been archived by the owner on Jun 14, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 56
/
Copy pathstart.js
127 lines (110 loc) · 3.43 KB
/
start.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/**
* Start
*
* The create-guten-block CLI starts here.
*
* TODO:
* - checkRequiredFiles
* - printBuildError
*/
'use strict';
// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'development';
process.env.NODE_ENV = 'development';
// Makes the script crash on unhandled rejections instead of silently
// ignoring them. In the future, promise rejections that are not handled will
// terminate the Node.js process with a non-zero exit code.
process.on( 'unhandledRejection', err => {
throw err;
} );
const ora = require( 'ora' );
const chalk = require( 'chalk' );
const webpack = require( 'webpack' );
const config = require( '../config/webpack.config.dev' );
const resolvePkg = require( 'resolve-pkg' );
const cgbDevUtilsPath = resolvePkg( 'cgb-dev-utils', { cwd: __dirname } );
const clearConsole = require( cgbDevUtilsPath + '/clearConsole' );
const formatWebpackMessages = require( cgbDevUtilsPath +
'/formatWebpackMessages' );
// Don't run below node 8.
const currentNodeVersion = process.versions.node;
const semver = currentNodeVersion.split( '.' );
const major = semver[ 0 ];
// If below Node 8.
if ( major < 8 ) {
console.error(
chalk.red(
'You are running Node ' +
currentNodeVersion +
'.\n' +
'Create Guten Block requires Node 8 or higher. \n' +
'Kindly, update your version of Node.'
)
);
process.exit( 1 );
}
clearConsole();
// Init the spinner.
const spinner = new ora( { text: '' } );
// Create the production build and print the deployment instructions.
async function build( webpackConfig ) {
// Compiler Instance.
const compiler = await webpack( webpackConfig );
// Run the compiler.
compiler.watch( {}, ( err, stats ) => {
clearConsole();
if ( err ) {
return console.log( err );
}
// Get the messages formatted.
const messages = formatWebpackMessages( stats.toJson( {}, true ) );
// If there are errors just show the errors.
if ( messages.errors.length ) {
// Only keep the first error. Others are often indicative
// of the same problem, but confuse the reader with noise.
if ( messages.errors.length > 1 ) {
messages.errors.length = 1;
}
// Clear success messages.
clearConsole();
// Formatted errors.
console.log( '\n❌ ', chalk.black.bgRed( ' Failed to compile. \n' ) );
const logErrors = console.log( '\n👉 ', messages.errors.join( '\n\n' ) );
console.log( '\n' );
spinner.start(
chalk.dim(
'Watching for changes... let\'s fix this... (Press CTRL + C to stop).'
)
);
return logErrors;
}
// CI.
if (
process.env.CI &&
( typeof process.env.CI !== 'string' ||
process.env.CI.toLowerCase() !== 'false' ) &&
messages.warnings.length
) {
console.log(
chalk.yellow(
'\nTreating warnings as errors because process.env.CI = true.\n' +
'Most CI servers set it automatically.\n'
)
);
return console.log( messages.warnings.join( '\n\n' ) );
}
// Start the build.
console.log( `\n${ chalk.dim( 'Let\'s build and compile the files...' ) }` );
console.log( '\n✅ ', chalk.black.bgGreen( ' Compiled successfully! \n' ) );
console.log(
chalk.dim( ' Note that the development build is not optimized. \n' ),
chalk.dim( ' To create a production build, use' ),
chalk.green( 'npm' ),
chalk.white( 'run build\n' )
);
return spinner.start(
`${ chalk.dim( 'Watching for changes... (Press CTRL + C to stop).' ) }`
);
} );
}
build( config );