рдпрджрд┐ рдЖрдк рд╣рд░ рдмрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ Ctrl+C
рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИ!

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрдкрдирд╛ рд╕реАрдПрд▓рдЖрдИ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред рдШрдЯрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреИрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИрдВ, рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рд╣реИрдВред рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдПрдХ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдиреЗ рдЕрдкрдиреА рдЯреАрдо рдореЗрдВ рдЬрдбрд╝реЗрдВ рдЬрдорд╛ рд▓реА рд╣реИрдВред рдФрд░ рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
рд╕рдВрд░рдЪрдирд╛ рд╕реНрд╡рдпрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реНрдЯреИрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ:
- рд╢реИрд▓рд┐рдпрд╛рдБ - рд╕реНрдЯрд╛рдЗрд▓, рдПрд╕рд╕реАрдПрд╕ рдореЙрдбреНрдпреВрд▓, рд╕реАрдПрд╕рдПрд╕;
- рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ;
- рдкрд░реАрдХреНрд╖рдг
рдирдП рдШрдЯрдХ рдмрдирд╛рддреЗ рд╕рдордп рдЖрдкрдХреЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, WebStorm рдореЗрдВ)ред рд▓реЗрдХрд┐рди рдЖрдЬ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдПрдХ рдПрдХрд▓ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдШрдЯрдХ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ:
npm run create components/Home/ComponentName
рдЯреНрд░реЗрдирд┐рдВрдЧ
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо Create React App рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ред
рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдБ:
npx create-react-app react-cli
рд╣рдорд╛рд░реЗ рд╕рднреА рдХреЛрдб рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдореЗрдВ cli рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЕрдВрджрд░ create.js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ 3 рдореЙрдбреНрдпреВрд▓ рдЪрд╛рд╣рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
fs - рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ред
рдкрде - рдлрд╝рд╛рдЗрд▓ рдкрде рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ред
рдиреНрдпреВрдирддрд╛рд╡рд╛рджреА - рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ред
рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдПрдХ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдкрде рдХреЗ рдирд╛рдо рдФрд░ рдШрдЯрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ ( рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, components/folder1/folder2/Menu
) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдкрде рдФрд░ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВред
рд╕рднреА рддрд░реНрдХ process
рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрди рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ:
node cli/create.js --path components/folder/Menu
рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
console.log(process.argv);
рдиреНрдпреВрдирддрдо рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рддрд░реНрдХреЛрдВ рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
рдорд╣рд╛рди, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрд╡рд╢реНрдпрдХ рдЪрд░ рддреИрдпрд╛рд░ рдХрд░реЗрдВред рд╣рдореЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ src рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде, рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рддрд░реНрдХреЛрдВ рд╕реЗ рдкрде рдФрд░ рдШрдЯрдХ рдХреЗ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдпреЗ рдХрд┐ рд╣рдордиреЗ рдПрдХ рдЕрд╡рд┐рдЪрд▓ рдорд╛рд░реНрдЧ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рд╣реИред рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, рд╣рдореЗрдВ рдпреЗ рд╕рднреА рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдмрдирд╛рдиреЗ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдЪрд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рд╣рдо рдкрде рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ mkdirSync
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШрдЯрдХ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВред рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВрдЧреЗред
рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ред рд╣рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ (рдЙрд╕реА рд╕рдордп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ src
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╣реАрдВ рд╣реИ):
node cli/create.js --path components/A/B/C/D/E/CustomComponent
рдФрд░ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ:

рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдирд╛
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛, рдХрд┐рдпрд╛, рд╡рд╣ рд╕рдм рдЬреЛ рдШрдЯрдХ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдирд╛ рд╣реИред
рд╣рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рдШрдЯрдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
- рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рджреЗ рд╕реАрдПрд╕рдПрд╕
- рдЯреАрдПрд╕ рдХреЗ рдмрд┐рдирд╛
- рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ
- рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ 3 рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
1. рдШрдЯрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ
import React from 'react'; import './CustomComponent.css'; const CustomComponent = () => { return ( <div className="wrapper"> </div> ); }; export default CustomComponent;
2. рд╕реВрдЪрдХрд╛рдВрдХ рдлрд╝рд╛рдЗрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ
export { default } from './CustomComponent';
3. рд╢реИрд▓реА рдлрд╝рд╛рдЗрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ
.wrapper {}
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рдЪрд░ рдореЗрдВ рдШрдЯрдХ (рдШрдЯрдХ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝реЛрд▓реНрдбрд░ рд╕рд╣рд┐рдд) рдХреЛ рдкреВрд░рд╛ рд░рд╛рд╕реНрддрд╛ рджреЗрдВ:
рдирдИ рдлрд╛рдЗрд▓ writeFileSync
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдкрде рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд▓реЗ рдЬрд╛рддреА рд╣реИред
рдПрдХ рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛:
рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛:
рдПрдХ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдмрдирд╛рдирд╛:
рд╣реЛ рдЧрдпрд╛!
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХреНрдпрд╛ рд╣реБрдЖред
рдпрд╣ рдХреЗрд╡рд▓ 43 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдРрд╕реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ!
рдЕрдм рдПрдХ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
node cli/create.js --path components/folder1/folder2/Button

рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рдЧрдпрд╛! рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рд╣реИ ...
Package.json рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдирд╛
рдХрдорд╛рдВрдб рдХреЛ package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдкрде рди рд▓рд┐рдЦреЗрдВ
{ "name": "react-cli", "version": "0.1.0", "private": true, "dependencies": { "react": "^16.12.0", "react-dom": "^16.12.0", "react-scripts": "3.2.0" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", "create": "node cli/create.js --path" }, "eslintConfig": { "extends": "react-app" }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } }
рдЕрдм рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:
node cli/create.js --path components/folder1/folder2/Button
рд╣рдо рд╕рд┐рд░реНрдл рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
npm run create components/folder1/folder2/Button
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдЬреАрдердм рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ