리액트 들어가기전 간단한 node정리!
강의는 한 입 크기로 잘라 먹는 리액트
node는 “자바스크립트 파일 실행기”node는 파일을 직접 실행하는 명령어.
자바스크립트를 구동하는 구동기 역활, 코드를 브라우저 밖에서 실행할 수 있게 해주는 런타임 환경이다.
ctrl+` ⇒ 터미널

->현재 경로
새로운 node.js 패키지를 생성하기 위해 새로운 패키지를 초기화 or 새로 만들어 달라 ⇒ npm init

패키지 이름이 뭐냐(자동값) ⇒바꾸고싶으면 바꾸기

일단 엔터만 클릭해서 정보 입력해주고 패키지 생성하기

그럼 기본적으로 넣어준게 파일 만들어줌

js파일 만들어서 node랑연결시켜주는방법
node index.js(파일이름,경로)
“Node로 src/index.js 파일 실행해줘”라는 뜻.

잘 실행된걸 확인

인덱스파일이 src파일 안에 있었다면 node src/index.js 경로를 반드시 명시해줘야함 ‘src폴더 안에 인덱스 파일 실행하라~ 하는것’
scriptsnpm은 “명령어를 저장해두고 실행하는 관리자”
스크립트 안에 있는 매크로들!

start"scripts": { "start": "node src/index.js" }
그럼
npm run start
= npm이 start라는 이름을 찾아서
= 그 안에 적힌 "node src/index.js"를 대신 실행해줘요.
일종의 매크로 역활을 하는것 경로를 지정!

그래서 start에 경로를 지정해 놓고 npm run start 라고 하면 연결된걸 확인할수있음
node 파일경로npm run 별칭
하나의 스크립트에 모든 기능을 넣으면 코드 줄이 너무 길어지니까 나눠쓰는

일단 이 2개만 배울것임


모듈(module)은 “파일 하나”라고 생각
module.exports는 이 파일에서 밖으로 내보낼 것 목록


벨류값으로 사용되는 변수의 이름과 키값이 똑같을 경우 변수나 함수의 이름만 사용해도 됨
모듈이라는 내장객체에 export(내보내기)라는 프로퍼티에 객체를 저장해주는
각각 내보내고 싶은 값을 넣어주면 댐
⇒
{} 처럼 생긴 “값 묶음”const obj = { key: value };
키(key): 왼쪽 이름표(속성 이름)
벨류(value): 오른쪽에 실제로 들어가는 값(데이터)
예시:
const user = {name:"지지",age:20 };
name, age"지지", 20예를 들어:
const person = {name:"지지",age:20 };
여기서
person = 객체name, age = person 객체의 프로퍼티"지지", 20 = 그 프로퍼티에 들어있는 값Node에서는 module이라는 “내장 객체”가 있고,
그 안에 exports라는 프로퍼티(칸)가 있음.
즉 이런 구조:
module (객체)exports (프로퍼티)그리고 이 코드:
module.exports = { add, sub };
이건 말 그대로
module 객체의 exports라는 칸에
{ add, sub }라는 객체를 넣어준다
라는 뜻.
module.exports// 처음엔 비어있거나 기본값 module.exports = { add, sub };// 이제 exports 칸에 이 객체가 저장됨

처음에 require()함수로 불러오는것
require(”./math”);로 하면 불러와짐. 이걸 변수로 담기
const moudleDate = require(”./math”);

add,sub가 잘 출력된걸 확인할수있음
그럼 moudleDate 함수안에는 {add: [Function: add], sub: [Function: sub]}가 담겨있는것임.

3과-1이 잘 출력되었음
const moudleDate = require(”./math”);을 그대로 쓸필요는 없음 const { add, sub }= require(”./math”);로 해도 동일함
const { add, sub } =require("./math"); add(1,2); sub(1,2);
👉 “상자에서 필요한 물건(add, sub)만 바로 꺼내서 손에 쥐는 방식”
사실 방법 B는 내부적으로 이런 뜻:
const moduleData =require("./math"); const add = moduleData.add; const sub = moduleData.sub;
이걸 한 줄로 줄인 게
const { add, sub } =require("./math");
좀 더 최신식
이걸 쓰려면 package.json 에서 es모듈 시스템을 쓰겟다고 해줘야함

그래서 es를 쓴다고 해놓고 common꺼를 쓰면 오류가 남
⇒ 기본적으로 함께 쓸 수 없음

math.js부분을
module.exports = { add, sub };를 //
export { add, sub }; 로 바꿔줘야함
또한 index.js부분을
const moduleData =require("./math");를 //
import mul, { add, sub } from "./math.js"; 로 바꿔야함.
여기서 주의할점은 확장자를 반드시 적어줘야함. (ㅇㅇ.js말하는거)
// math 모듈 export function add(a, b) { return a + b; } export function sub(a, b) { return a - b; }
//로 한번에 적어주면 더 간편하게 작성가능!
⇒ 대표 1개만 내보낼때 이름 맘대로 가넝
// math 모듈 export default function multiply(a, b) { return a * b; }
이 파일에서 multiply 함수 하나를 기본(default)으로 내보낼게 라는 뜻
//index.js import multiply from "./math.js"; import mul from "./math.js";
mul이라고 적어도 알아먹음.
named export를 쓰고, 이름이 기본적으로 고정export const add = ... 처럼 이름 붙여서 내보내면import { add } from ... 처럼 그 이름으로 가져와야 해.//동일한 경로로 부터 import문이 여러개라면 합쳐서 사용도 가넝 import mul, { add, sub } from "./math.js";
“이 파일에서 대표로 하나만 내보내는 거니까”
가져오는 사람이 원하는 컨벤션에 맞게 이름을 맞출 수 있게 해준 거.

install에 적힌 명령어를 내 터미널에 적어주면 댐

그럼 라이브러리가 잘 설치 되었다고 알람이 뜨면서

랜덤컬러라는 라이브러리의 버전이 표시댐

라이브러리가 저장되는곳

package.js(기존) 과 package-lock.json(라이브러리생성후)의 차이는??
⇒package-lock.json는 정확한 버전이 올라감
//package.js "dependencies": { "randomcolor": "^0.6.2" } //package-lock.json "node_modules/randomcolor": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/randomcolor/-/randomcolor-0.6.2.tgz", "integrity": "sha512-Mn6TbyYpFgwFuQ8KJKqf3bqqY9O1y37/0jgSK/61PUxV4QfIMv0+K2ioq8DfOjkBslcjwSzRfIDEXfzA9aCx7A==" }
^ → Version Range(버전 범위) 대략적인 버전이라는 뜻
✅응용하기
라이브러리에서 가져올때는 from 뒤에 경로를 적는게 아니라 라이브러리 이름을 적어야함.
//randomcolor 라이브러리에 있는 기본값 불러오기 import randomcolor from "randomcolor"; const color = randomcolor(); console.log(color);

그러면 랜덤컬러가 잘 나옴
npm instal라이브러리 지워졌을때
//package.js "dependencies": { "randomcolor": "^0.6.2" }
package.js에 정보만 가지고 있다면 원래 다시 설치 가넝
터미널에 npm instal 혹은 npm i 입력하면
package.js에 설치된 버전을 기준으로 다시 등록해줌 → 파일 생성 완!
⇒ 다른사람과 공유하거나 업로드할때는 node_modules 파일을 공유하지 않음! 파일 크기도 크고 재설치가 가능하기때문에~