자 이제 우리는 Building for Production을 할건데요.
package.json
, package-lock.json
, node_modules
, .babelrc
, .gitignore
, .env
, .eslintrc.js
를 제외하고 모든 파일을 src밑에 넣어줍니다.
youtube
+|src
|--ALL THE FILE--
*|app.js
*|init.js
*|passport.js
*|package.json
expres.static("static")
으로 한다는 것은 view engine과 마찬가지로 프로젝트 폴더의 static폴더를 의미하는건데 현재 src안으로 모두 들어갔으므로 path.join(__dirname, "static")
으로 바꿔줍니다.import path from 'path';
app.set('views', path.join(__dirname, 'views'));
app.set('/static', express.static(path.join(__dirname, "static");
import '@babel/polyfill';
현재 상태가 PRDUCTION 이냐 DEV냐에 따라 callback url을 달리해주어야 합니다. 배포 주소에는 heroku를 통해 배포 후 할당 받은 주소를 입력해줍니다.
passport.use(new GithubStrategey({
clientID: process.env.GH_CLIENT_ID,
clientSecret: process.env.GH_SECRET,
callbackURL: process.env.PRODUCTION ? `배포 주소`:"http://localhost:4000/auth/github/callback"
}, githubLoginCallback));
src/assets
, src/static
, src/webpack.config.js
는 무시해라 왜냐하면 babel이 변환할 수 있는 파일이 아니니까,
외에 공간이 있어서는 안됩니다.build:server
와 build:assets
명령을 실행하라build
명령에 앞서 build 폴더를 지우고 새로 만들어라. build
script 실행시 자동 실행됨PRODUCTION=true
를 해주는 이유는 배포용이기 때문에 파일 크기를 작게 만들어달라는 의미이다.start
명령에 앞서 npm run build
를 실행해라. start
script 실행시 자동 실행됨. 이것을 하는 이유는 heroku가 start
script만 실행시키기 때문에 npm run build
를 먼저 실행시켜서 build폴더를 만들어주기 위함입니다.{
"scripts":{
"dev:server": "nodemon --exec babel-node src/init.js --ignore 'scss'",
"dev:assets": "cd src && WEBPACK_ENV=development webpack -w",
"build:server": "babel src --out-dir build --ignore 'src/assets', 'src/static', 'src/webpack.config.js'",
"build:assets": "cd src && WEBPACK_ENV=production webpack && cp -R static ../build && cp -R views ../build",
"build": "npm run build:server && npm run build:assets",
"prebuild": "rm -rf build",
"start": "PRODUCTION=true node build/init.js",
"prestart": "npm run build"
}
}
$npm run build
: 빌드 파일 생성
$npm start
: 빌드된 폴더의 init.js 실행
혹시 babel 관련 오류가 발생하면 `$npm install @babel/cli`를 터미널에 입력해보세요.