# Building for production

# folder structure

README.md, package.json, package-lock.json을 제외한 모든 파일은 src 폴더에 넣어준다.

# scripts

// package.json
"scripts": {
    "dev:server": "nodemon --exec babel-node src/init.js --delay 2 --ignore '.scss' --ignore 'static' ",
    "dev:assets": "cd src && WEBPACK_ENV=development webpack -w",
    "build:assets": "cd src && WEBPACK_ENV=production webpack",
    "build:server": "babel src --out-dir build --ignore 'src/assets','src/static','src/webpack.config.js'",
    "copyAll": "cp -R src/static build && cp -R src/views build",
    "build": "npm run build:server && npm run build:assets && npm run copyAll",
    "prebuild": "rm -rf build",
    "start": "node build/init.js"
  },

npm run build를 실행하면 build 폴더를 제거하고, build:server, build:assets 스크립트를 실행한다.

babel은 static file들은 담지 않기 때문에 assets와 static폴더 그리고 webpack.config.js 파일은 babel 실행시 제외시켜준다.

제외시킨 파일들은 cp -R src/static build && cp -R src/views build와 같이 build 폴더로 복사해준다.

# directory 설정

모든 파일들을 src 폴더 안으로 옮겼기 때문에, 아래와 같이 views와 static의 폴더 경로를 변경해주어야 한다.

// src/app.js

app.set("views", path.join(__dirname, "views"));
app.use("/static", express.static(path.join(__dirname, "static")));

만약 Babel과 관련된 에러를 만나게 된다면

@babel/core, @babel/node를 설치하자!