66651
๐Ÿ‘€
66651
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (57)
    • note (28)
    • log (13)
    • error (9)
    • etc (7)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
66651

๐Ÿ‘€

Node.js๋กœ CRA ์‹œ ๊ธฐ๋ณธ ํŒŒ์ผ๊ณผ ํด๋” ํ•œ ๋ฒˆ์— ์„ธํŒ…ํ•˜๊ธฐ
note

Node.js๋กœ CRA ์‹œ ๊ธฐ๋ณธ ํŒŒ์ผ๊ณผ ํด๋” ํ•œ ๋ฒˆ์— ์„ธํŒ…ํ•˜๊ธฐ

๋ฆฌ์•กํŠธ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ CRA ๋•Œ๋งˆ๋‹ค ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ธฐ๋ณธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํด๋”๋ง ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด ์‹œ๊ฐ„์ด ์•„๊น๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๋งค ๋ฒˆ component ๊ตฌ์กฐ๋‚˜ ํŒŒ์ผ์ด ๋ฐ”๋€Œ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์„ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋„ ์• ๋งคํ–ˆ๋Š”๋ฐ, ์ด ์ž‘์—…๋“ค์„ Node.js์˜ file system์„ ์ด์šฉํ•ด์„œ ์ž๋™ํ™”๋ฅผ ํ•ด๋ณด์•˜๋‹ค.

 

 

file system ๋ชจ๋“ˆ import

Node.js์— ๋‚ด์žฅ๋˜์–ด์žˆ๋Š” ํŒŒ์ผ์‹œ์Šคํ…œ์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

const fs = require('fs');

 

 

๋””๋ ‰ํ† ๋ฆฌ ์„ธํŒ…

์ƒ์„ฑํ•  ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ array์— ๋‹ด์•„ ์ž‘์„ฑํ•ด์ค€๋‹ค.

const arrDirectory = [
    'src/apis',
    'src/components/Shared/BtnLike',
    'src/components/Shared/NotFound',
    'src/components/Shared/FailLoadData',
    'src/pages/CartPage',
    'src/pages/HomePage',
    'src/pages/ProductDetailPage',
];

 

 

์ƒ์„ฑํ•  ํŒŒ์ผ์˜ ํ…œํ”Œ๋ฆฟ ์„ธํŒ…

ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” JSX ์ปดํฌ๋„ŒํŠธ์™€ styled-component ํŒŒ์ผ์˜ ํ…œํ”Œ๋ฆฟ์„ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋‹ค.

const constComponent = title => `import React from 'react';
import {${title}Wrapper} from './styled.jsx'

const ${title} = () => {
    return <p>${title}</p>;
};

export default ${title};
`;

const styledComponent = title => `import styled from 'styled-components';

export const ${title}Wrapper = styled.div\`\`;
`;

 

 

Util ํ•จ์ˆ˜ ์ถ”๊ฐ€

ํŒŒ์Šค์นผ ์ผ€์ด์Šค๋ฅผ ์นด๋ฉœ ์ผ€์ด์Šค๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•ด์ค€ ๊ฒƒ์œผ๋กœ ํ•„์ˆ˜์ ์ธ ๋ถ€๋ถ„์€ ์•„๋‹ˆ๋‹ค.

const pascalToCamel = str => {
    return str[0].toLowerCase() + str.slice(1);
};

 

 

ํŒŒ์ผ ์ƒ์„ฑ ํ•จ์ˆ˜ ์ถ”๊ฐ€

ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋””๋ ‰ํ† ๋ฆฌ, ํŒŒ์ผ๋ช…, ํ…œํ”Œ๋ฆฟ์„ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.

[ic]fs.writeFile[/ic] ์„ ํ†ตํ•ด ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ  ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์˜ต์…˜์„ ์ฃผ์—ˆ๋‹ค.

const createFile = (dir, file, content) => {
    fs.writeFile(
        `${dir}/${file}`,
        content,
        {
            flag: 'ax',
        },
        err => {
            if (err === null) {
                console.log(`${file} file successfully saved`);
            } else if (err.code === 'EEXIST') {
                console.log('File already exists');
            }
        }
    );
};

 

 

๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ ์ƒ์„ฑ

[ic]fs.mkdirSync[/ic] ๋ฅผ ์ด์šฉํ•ด์„œ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

์œ„์—์„œ ์„ ์–ธํ•ด ์ค€ ๋””๋ ‰ํ† ๋ฆฌ array๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ํด๋”์™€ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๋‹ค.

const createDirectory = path => {
    path.split('/').reduce((directories, directory) => {
        const category = directories;

        directories += `${directory}/`;

        if (!fs.existsSync(directories)) {
            fs.mkdirSync(directories);
        }

        // components ์™€ pages ํ•˜์œ„ ๊ฒฝ๋กœ์— ํ…œํ”Œ๋ฆฟ ์ƒ์„ฑ
        if (category.includes('components') || category.includes('pages')) {
            createFile(directories, `styled.jsx`, styledComponent(directory));
            createFile(
                directories,
                `${directory}.jsx`,
                constComponent(directory)
            );
        }

        return directories;
    }, '');
};

arrDirectory.forEach(item => createDirectory(item));

 

 

scripts ์ถ”๊ฐ€

์กฐ๊ธˆ ๋” ์ง๊ด€์ ์œผ๋กœ ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก scripts๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

์ด์ œ ์ž‘์„ฑํ•œ js ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ๋‘๊ณ  ํ„ฐ๋ฏธ๋„์— [ic]node ํŒŒ์ผ๋ช…[/ic]์„ ์ž…๋ ฅํ•˜๋ฉด ๊ธฐ๋ณธ ํด๋”๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

// package.json

"scripts": {
    "setDir": "node {ํŒŒ์ผ๋ช…}"
},

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
    'note' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Next.js] Dynamic Imports
    • [Next.js] import ๊ฒฝ๋กœ์— @๋ณ„์นญ ์‚ฌ์šฉํ•˜๊ธฐ
    • [Deep Dive] 42์žฅ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    • [Deep Dive] 22์žฅ this
    66651
    66651
    always awake

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”