1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | 'use strict';
|
9 |
|
10 | const chalk = require('chalk');
|
11 | const url = require('url');
|
12 | const globalModules = require('global-modules');
|
13 | const fs = require('fs');
|
14 |
|
15 | function printHostingInstructions(
|
16 | appPackage,
|
17 | publicUrl,
|
18 | publicPath,
|
19 | buildFolder,
|
20 | useYarn
|
21 | ) {
|
22 | if (publicUrl && publicUrl.includes('.github.io/')) {
|
23 |
|
24 | const publicPathname = url.parse(publicPath).pathname;
|
25 | const hasDeployScript =
|
26 | typeof appPackage.scripts !== 'undefined' &&
|
27 | typeof appPackage.scripts.deploy !== 'undefined';
|
28 | printBaseMessage(buildFolder, publicPathname);
|
29 |
|
30 | printDeployInstructions(publicUrl, hasDeployScript, useYarn);
|
31 | } else if (publicPath !== '/') {
|
32 |
|
33 | printBaseMessage(buildFolder, publicPath);
|
34 | } else {
|
35 |
|
36 |
|
37 | printBaseMessage(buildFolder, publicUrl);
|
38 |
|
39 | printStaticServerInstructions(buildFolder, useYarn);
|
40 | }
|
41 | console.log();
|
42 | console.log('Find out more about deployment here:');
|
43 | console.log();
|
44 | console.log(` ${chalk.yellow('https://cra.link/deployment')}`);
|
45 | console.log();
|
46 | }
|
47 |
|
48 | function printBaseMessage(buildFolder, hostingLocation) {
|
49 | console.log(
|
50 | `The project was built assuming it is hosted at ${chalk.green(
|
51 | hostingLocation || 'the server root'
|
52 | )}.`
|
53 | );
|
54 | console.log(
|
55 | `You can control this with the ${chalk.green(
|
56 | 'homepage'
|
57 | )} field in your ${chalk.cyan('package.json')}.`
|
58 | );
|
59 |
|
60 | if (!hostingLocation) {
|
61 | console.log('For example, add this to build it for GitHub Pages:');
|
62 | console.log();
|
63 |
|
64 | console.log(
|
65 | ` ${chalk.green('"homepage"')} ${chalk.cyan(':')} ${chalk.green(
|
66 | '"http://myname.github.io/myapp"'
|
67 | )}${chalk.cyan(',')}`
|
68 | );
|
69 | }
|
70 | console.log();
|
71 | console.log(`The ${chalk.cyan(buildFolder)} folder is ready to be deployed.`);
|
72 | }
|
73 |
|
74 | function printDeployInstructions(publicUrl, hasDeployScript, useYarn) {
|
75 | console.log(`To publish it at ${chalk.green(publicUrl)} , run:`);
|
76 | console.log();
|
77 |
|
78 |
|
79 | if (!hasDeployScript) {
|
80 | if (useYarn) {
|
81 | console.log(` ${chalk.cyan('yarn')} add --dev gh-pages`);
|
82 | } else {
|
83 | console.log(` ${chalk.cyan('npm')} install --save-dev gh-pages`);
|
84 | }
|
85 | console.log();
|
86 |
|
87 | console.log(
|
88 | `Add the following script in your ${chalk.cyan('package.json')}.`
|
89 | );
|
90 | console.log();
|
91 |
|
92 | console.log(` ${chalk.dim('// ...')}`);
|
93 | console.log(` ${chalk.yellow('"scripts"')}: {`);
|
94 | console.log(` ${chalk.dim('// ...')}`);
|
95 | console.log(
|
96 | ` ${chalk.yellow('"predeploy"')}: ${chalk.yellow(
|
97 | `"${useYarn ? 'yarn' : 'npm run'} build",`
|
98 | )}`
|
99 | );
|
100 | console.log(
|
101 | ` ${chalk.yellow('"deploy"')}: ${chalk.yellow(
|
102 | '"gh-pages -d build"'
|
103 | )}`
|
104 | );
|
105 | console.log(' }');
|
106 | console.log();
|
107 |
|
108 | console.log('Then run:');
|
109 | console.log();
|
110 | }
|
111 | console.log(` ${chalk.cyan(useYarn ? 'yarn' : 'npm')} run deploy`);
|
112 | }
|
113 |
|
114 | function printStaticServerInstructions(buildFolder, useYarn) {
|
115 | console.log('You may serve it with a static server:');
|
116 | console.log();
|
117 |
|
118 | if (!fs.existsSync(`${globalModules}/serve`)) {
|
119 | if (useYarn) {
|
120 | console.log(` ${chalk.cyan('yarn')} global add serve`);
|
121 | } else {
|
122 | console.log(` ${chalk.cyan('npm')} install -g serve`);
|
123 | }
|
124 | }
|
125 | console.log(` ${chalk.cyan('serve')} -s ${buildFolder}`);
|
126 | }
|
127 |
|
128 | module.exports = printHostingInstructions;
|