[node.js] 대규모 Node.js 프로젝트를 구성하는 방법

대규모 Node.js 프로젝트를 구성하는 좋은 방법은 무엇입니까?

예를 들어, express.js와 socket.io를 모두 사용하는 앱? 여기에는 응용 프로그램 논리 구조와 파일 시스템이 모두 포함됩니다.

현재 저는 엄청난 양의 코드를 하나의 마스터 js 파일에 넣고 코드를 거대한 전역 객체에 배치하는 중입니다.



답변

초보자의 예

나는 원래 @ david-ellis에서 확인한 것이 마음에 들며 좋은 것으로 이해하기 위해 깊이 연구해야합니다. 그러나 나는 간단한 예제를보고 싶어하는 초보자를 위해 더 간단하게 만들었을 것입니다. 누군가가 저에게 보여 주었으면 좋았을 것입니다.

express를 사용하고 app.js 파일에 많은 경로가 나열된 일반적인 시나리오를 제공하겠습니다. 그 내용은 다음과 같습니다.

app.js

// ... startup code omitted above

app.get('/', function(req, res) {
  res.render('index', { title : 'home' });
});
app.get('/contactus', function(req, res) {
  res.render('contactus', { title : 'contact us' });
});
app.get('/anotherpage', function(req, res) {
  res.render('anotherpage', { title : 'another page' });
});
// and so on...

50 개의 라우트가 있다고 상상할 수 있습니다.이 파일은 손을 뗄 수 없습니다. app.js 파일에서 이러한 혼란을 제거하는 것이 좋습니다.

이제 앱에 “controllers”폴더를 만들어 구조가 다음과 같이 보이도록합니다.

app.js
/controllers

“index.js”라는 “/ controllers”내에 파일을 생성하고 다음 코드를 입력합니다.

/controllers/index.js

module.exports.set = function(app) {
   // copy your routes listed in your app.js directly into here
}

“app.js”파일에서 경로 목록을 잘라서 붙여넣고 “/controllers/index.js”파일에 배치합니다.

app.js 파일에서 경로를 제거하고 경로를 대신하여 다음을 수행하십시오.

app.js

// remove your routes and replace with this code
var controllers = require('./controllers');
controllers.set(app);

이제 “/controllers/index.js”파일도 분할되도록하려면 예제를 하나 더 추가하여 Node.js가 코드를 구성하는 방법에서 실제로 러시아 인형처럼 작동하는 방식을 살펴 보겠습니다.

“/ controllers”내에 “accounts.js”파일을 하나 더 추가하고 그 안에 다음을 배치합니다.

/controllers/account.js

module.exports.set = function(app) {
    // put more app route listings here
}

이제 “/controllers/index.js 파일에”account.js “에 대한 참조를 입력하십시오.

/controllers/index.js

var account = require('./account.js');

module.exports.set = function(app) {
   // your routes here

   // let "account.js" set other routes
   account.set(app);
}

당신이 상상할 수 있듯이, 당신은 계속해서 더 작은 부분으로 나눌 수 있고, 폴더 안에 더 많은 폴더를 넣고 원한다면 “require”로 참조 할 수 있습니다. “/ lib”또는 라이브러리 파일에 동일한 개념을 사용할 수 있습니다. “node_modules”는 이미 이것을하고 있습니다.

이것이 node.js가 프로그래밍하기에 매우 즐거운 이유 중 하나 일뿐입니다.

관리 가능한 Express 4 라우팅 예

여기에 이와 관련된 급행 4 개 노선에 대해 제가 답변 한 또 다른 게시물이 있습니다.

Express.js 중첩 라우터로 휴식


답변

저는 며칠 전에이 주제에 대한 블로그 게시물을 썼습니다. 기사는 프랑스어로되어 있지만 GitHub 저장소 (영어)를 설정하여 제가 사용하는 구조의 작동 예를 보여줍니다.

분명히이 질문에 대한 확실한 답은 없지만 다른 사람들이 무엇을하고 있는지 보는 것은 흥미 롭습니다. 그리고 저는이 주제에 대한 다른 의견에 귀를 기울이고 있습니다 ( 여기 에서도 제가 제안하는 요약을 볼 수 있습니다). .


답변

다른 블로그 게시물과 마찬가지로 Express응용 프로그램 구성에 대해 특별히 작성했습니다 . 약 1 년 반 동안 사용해온 방법입니다. 기본적으로 데이터 엔터티 또는 기타 핵심 요소를 중심으로 애플리케이션을 구성합니다. 각 요소에 대한 논리를 자체 디렉토리에 배치하십시오. 나는 파이썬에서 많이 빌리려고했다.

http://rycole.com/2013/01/28/organizing-nodejs-express.html


답변

그의 기사는 더 이상 온라인 상태가 아니지만 Eric Satterwhite의 노드 시리즈는 아래 나열된 구조를 권장했습니다.

# Project
.
|-- packages/
|   |-- project-core
|   |   |-- lib/
|   |   |-- commands/
|   |   |-- startup/
|   |   |-- conf/
|   |   |-- test/
|   |   |-- package.json
|   |   |-- README.md
|   |   |-- events.js
|   |   |-- .npmignore
|   |   `-- index.js
|-- package.json
`-- index.js

으로 packages/폴더 모듈화에 대한 소스로 전환.


답변

이 분야의 초보자라면 개발자들에게 사랑받는 기존 프로젝트를 살펴 보는 것이 좋습니다. 그들 중 일부는 다음과 같습니다.

  • Sails.js -18k 별. 내가 제공 한 링크에서 그들이 어떻게 APP 구조를 구성했는지 볼 수 있습니다. 훌륭한 웹 사이트에는 구조의 각 폴더에 대한 설명이 있습니다.

  • Express.js 생성기 -800 개의 별. Express.js 작업을 시작할 수있는 위대하고 간단한 템플릿이 있습니다. 여기에서 앱에서 경로를 분할하는 방법을 확인할 수 있습니다.

그건 그렇고, 너무 많은 개발자가 이전에 귀하의 사례를 수행했으며, 포크하고 업그레이드 할 수 있습니다.

  • Kioska . events/폴더 에서 이벤트를 다른 파일로 분리하는 방법을보십시오 .

  • Ballons.io 2.3k 별. 불행히도 하나의 파일에 전체 소켓 서버가 있지만 node.js 및 socket.io를 사용하여 앱의 전체 구조를 배울 수 있습니다.


답변

괜찮다면 언제든지 타이프 스크립트를 배우고 https://nestjs.com/으로 갈 수 있습니다.

JS를 고수하고 싶다면 양파 아키텍처를 사용하는 것이 좋습니다. 모범 사례는 다른 라이브러리 (다른 CSV 파서 등)로 마이그레이션해야하는 경우를 대비하여 별도의 비즈니스 로직, 컨트롤러, 심지어 라이브러리 (일부 클래스 / 헬퍼 내부에 래핑되어야 함)를 유지하는 것입니다.

양파 아키텍처를 사용하면 요청이 어디에서 오는지 신경 쓰지 않고 메시지 브로커를 추가하는 데 많은 변경 사항이 없습니다.

또한 이것을 시도하십시오 https://en.wikipedia.org/wiki/Domain-driven_design

ESLint는 적절한 프로젝트 구성에 도움이 될 수 있습니다.


답변