Node JS 백 엔 드 프로젝트 개발 및 생산 환경 총괄
Node JS 에서 자주 사용 하 는 백 엔 드 프레임 워 크 는 express, koa, sails 가 있 습 니 다.국산 프레임 워 크 는 egg js 가 있 습 니 다. 이미 cnode 에서 생산 에 들 어 갔 고 think js 도 있 습 니 다. think phop 과 유사 합 니 다.모든 프레임 워 크 는 개발 환경 과 생산 환경 이 다르다.
koa
의 경우개발 환경 과 생산 환경의 차이
배경 템 플 릿 렌 더 링 (ejs, pug) 을 기반 으로 합 니 다.전후 분리 구 조 는 웹 팩 열 업데이트 실현 을 참고 하 시기 바 랍 니 다.
개발 환경
열 업데이트 (nodemon)
nodemon 은 js 파일 변 화 를 후회 하 며 프로그램 을 다시 실행 합 니 다.
package.json
의 scripts
에 추가 합 니 다.dev: 'nodemon server.js'
npm run dev
nodemon 에는 아직도 선택 할 수 있 는 설정 이 많 습 니 다. 구체 적 으로 nodemon 문 서 를 참조 하 십시오.
오류 처리
koa 를 예 로 들 면
app.on('error', err => {
log.error('server error', err)
});
브 라 우 저 페이지 에 오 류 를 던 지고 오류 페이지 를 미화 하려 면
express
express - error - handler, koa
onerror 를 사용 할 수 있 습 니 다.전단 js 코드 자동 포장 (webpack)
배경 템 플 릿 렌 더 링 이기 때문에
webpack-dev-server
으로 자동 리 셋 을 할 수 없습니다.할 수 있 는 것 은 webpack
의 watch
를 이용 하여 전단 js 가 바 뀐 후에 자동 으로 포장 하 는 것 이다. 물론 수 동 으로 새로 고침 을 피 할 수 없다.// webpack.config.js
const config = {
entry: {
app: path.resolve(root, './modules/app.js'),
about: path.resolve(root, './modules/about.js'),
},
output: {
path: path.resolve(root, './dist'),
publicPath: path.resolve(root, './dist'),
filename: '[name].js'
},
module: {
rules: [
{
test: /(\.js)$/,
use: {
loader: "babel-loader",
},
exclude: /node_modules/
}
]
},
devtool: '#eval-source-map',
watch: true,
watchOptions:{
poll:1000,// (ms)
ignored:/node_modules/,//
}
};
반드시 켜 야 합 니 다
source-map
. 그렇지 않 으 면 잘못된 위 치 를 찾 을 수 없습니다.생산 인지 개발 환경 인지 알 리 기 위해 cross - env 를 사용 한 다음 webpack
의 package.json
에 추가 할 수 있 습 니 다."watch": "cross-env NODE_ENV=development webpack --watch webpack.config.js"
개발 시 두 명령 을 실행 해 야 합 니 다.
// nodemon
npm run dev
// webpack
npm run watch
생산 환경
생산 환경 은 일반적으로 pm2 를 사용 합 니 다.
scripts
프로 세 스 수호 와 부하 균형 을 완 성 했 습 니 다. 내부 실현 원 리 는 여기 서 더 이상 언급 하지 않 고 pm2 문 서 를 구체 적 으로 참고 하 십시오.// pm2 ecosystem.config.js
pm2 ecosystem
생 성 된 프로필 은 생산 환경의 기본 본질 을 포함 하고 있 습 니 다.다 중 설정 은 pm2 문 서 를 참고 하여
pm2
파일 package.json
에 추가 하 십시오."prd": "pm2 start ecosystem.config.js --env production"
생산 환경 하에 서 운행 하 다.
npm run prd
이 때 우 리 는
scripts
전역 변 수 를 통 해 환경 상 태 를 얻 고 process
에 추가 할 수 있 습 니 다.const prdEnv = process.env.NODE_ENV == 'production'
정적 캐 시
const staticCache = require('koa-static-cache')
if(prdEnv) {
//
app.use(staticCache(path.join(__dirname, 'public'), {
maxAge: 365 * 24 * 60 * 60
}))
}
gzip
const compress = require('koa-compress')
if(prdEnv) {
// gzip
app.use(compress({
filter: function (content_type) {
return /text/i.test(content_type)
},
threshold: 2048,
flush: require('zlib').Z_SYNC_FLUSH
}))
}
로그 파일
유사
app.js
nginx
와 access.log
모듈 의 error.log
방법 으로 로 그 를 출력 합 니 다.우선 프로젝트 루트 디 렉 터 리 에 새 폴 더 fs
const fs = require('fs')
const path = require('path')
if(prdEnv) {
// logger
app.use(async(ctx, next) => {
const start = new Date()
await next()
const ms = new Date() - start
fs.appendFile(path.join(__dirname, 'logs', ctx.status < 400 ? 'access.log' : 'error.log'), `[${start.toLocaleString()}] ${ctx.status} ${ctx.method} ${ctx.url} - ${ms}ms\r
`)
})
}
강제 https
// force https
app.use((ctx, next) => {
if(ctx.protocol == 'http') {
ctx.redirect(ctx.href.replace('http', 'https'))
} else {
return next()
}
})
404 처리
템 플 릿 이름
appendFile
을 만 들 고 경로 뒤에 렌 더 링 합 니 다.// 404
app.use(async (ctx) => {
await ctx.render('notFound')
})
전단 js 코드 압축 혼동
웹 팩 에 플러그 인 추가
// webpack.config.js
// js
new webpack.optimize.CommonsChunkPlugin({name: 'common'})
//
new webpack.optimize.UglifyJsPlugin({
sourceMap: false,
parallel: true,
mangle: true,
compress: {
warnings: false,
drop_debugger: true,
drop_console: true
}
})
// package.json
"build": "cross-env NODE_ENV=production webpack --config webpack.config.js"
응용 프로그램 을 발표 할 때 실행 해 야 합 니 다.
npm run build
npm run prd
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node JS 백 엔 드 프로젝트 개발 및 생산 환경 총괄배경 템 플 릿 렌 더 링 (ejs, pug) 을 기반 으로 합 니 다.전후 분리 구 조 는 웹 팩 열 업데이트 실현 을 참고 하 시기 바 랍 니 다. nodemon 은 js 파일 변 화 를 후회 하 며 프로그램 을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.