ES6 기능이 활성화 된 상태에서 Node.js 앱을 실행하는 방법은 무엇입니까?


78

es6features를 사용하여 노드 앱을 실행하려면 BabelJS (이전 이름 : 6to5 ) 의 require 후크 를 사용합니다 .

// run.js
require("babel/register");
require("./app.js6");

node run.jsapp.js6 실행을 호출 합니다 . BabelJS를 설치하고 es6features 를 사용하려는 각 프로젝트에 대해 run.js 를 제공해야합니다 . 같은 전화를 선호합니다 nodejs6 app.js6. 이 시스템을 독립적으로 어떻게 구현할 수 있습니까 (Unix 및 Windows)?


NodeJS + Babel 대신 io.js를 사용해 보셨습니까? iojs.org/en/index.html
Jahed

나는 io.js를 몰랐다. 멋져 보이지만 BabelJS와 달리 나머지 인수를 지원하지 않습니다 .
maiermic

1
권리. 잘 주시하십시오. NodeJS와 달리 빠르게 움직이고 있으므로 곧 지원 될 것이라고 확신합니다.
Jahed

6
찾고 babel-node계십니까? babeljs.io/docs/usage/cli/#babel-node
Felix Kling

체크 아웃 할 수 있습니다 npmjs.com/package/babel-register-cli
aceofspades

답변:


139

앱의 package.json 파일에 babel-clibabel-preset-es2015(일명 ES6) 종속성을 추가하고 start스크립트를 정의합니다 .

{
  "dependencies": {
    "babel-cli": "^6.0.0",
    "babel-preset-es2015": "^6.0.0"
  },
  "scripts": {
    "start": "babel-node --presets es2015 app.js"
  }
}

그런 다음 다음 명령을 실행하여 앱을 실행할 수 있습니다.

npm start

Babel 사용을 중단하기로 결정한 경우 (예 : Node.js가 모든 ES6 기능을 지원하면) package.json에서 제거하면됩니다.

{
  "dependencies": {},
  "scripts": {
    "start": "node app.js"
  }
}

이것의 한 가지 이점은 앱을 실행하는 명령이 동일하게 유지되어 다른 개발자와 작업하는 경우 도움이된다는 것입니다.


20
babel 문서 는 production에서 babel-node 사용에 대해 명시 적으로 경고 합니다.

5
nodemon설정 에 대해 또는 다른 사람은 어떻습니까? 개발 중에 파일을 변경할 때마다 서버를 수동으로 다시로드합니까?
Green

문서에서 : 프로덕션에서 babel-node를 사용해서는 안됩니다. 캐시가 메모리에 저장되어 메모리 사용량이 많아 불필요하게 무겁습니다. 또한 전체 앱을 즉시 컴파일해야하므로 항상 시작 성능 저하를 경험하게됩니다.
Felipe Martim

업데이트 : 2017 년부터 선호되는 일반적인 사전 설정은 preset-env 입니다. 그리고 그것이 설치되어있는 한, 그것은 지정 될 필요조차 없습니다 ...
Frank

... 따라서 babel-clipreset-env이 설치되어있는 한 직접 원하는 경우 (npm 실행 없음 ... 및 package.json 편집 필요) 명령 (프로젝트 루트에서 발행)은 다음과 같습니다.$> ./node_modules/.bin/babel-node yourToolhere.js
Frank Nocke

39

es6 지원 및 파일 변경시 서버 다시로드를 사용하여 node.js 앱을 구성하는 방법 .


I. 구성 단계 (처음부터 프로젝트 생성) :

1. 터미널에서 프로젝트 기본 디렉토리로 이동하십시오.

npm init // 프로젝트 용 package.json 생성

2. 의존성 설치

npm install --save-dev babel
npm install --save-dev babel-cli
npm install --save-dev babel-preset-es2015
npm install --save-dev babel-preset-stage-0 //*1
npm install --save-dev nodemon

1-1 단계 또는 2 단계 일 수도 있으며 사용하려는 es의 기능에 따라 다릅니다.

3. package.json 파일에 다음과 같은 내용이 있어야합니다 (패키지 버전은 다를 수 있지만 괜찮습니다).

"devDependencies": {
  "babel": "^6.5.2",
  "babel-cli": "^6.16.0",
  "babel-preset-es2015": "^6.16.0",
  "babel-preset-stage-0": "^6.16.0",
  "nodemon": "^1.11.0"
}

4. 루트 프로젝트 디렉토리에 .babelrc 파일을 생성합니다 (package.json 파일이 있습니다).

{
 "presets": ["es2015", "stage-0"]
}

5. 두 개의 디렉터리를 만듭니다.

SRC - 여기가 ES6에 writen 파일과 디렉토리를하고있다

DIST - 여기 파일은 바벨을 사용 ES5하는 컴파일

프로젝트 루트 디렉토리는 다음과 같아야합니다.

  • 계획
    • src
      • index.js // 기본 프로젝트 파일
    • dist
    • package.json
    • .babelrc

7. package.json에 필요한 명령을 추가합니다.

"scripts": {
  "watch": "babel -w src/ -d dist/",
  "build": "babel src/ -d dist/",
  "serve": "babel -w src/ -d dist/ | nodemon --watch dist",
  "test": "echo \"Error: no test specified\" && exit 1"
}

8. 사용 가능한 명령 :

npm run watch // src 디렉토리에서 watch watch 변경을 시작하고 dist로 컴파일합니다.

npm run build // src 디렉토리에서 dist로 파일을 컴파일합니다.

npm run serve // 그것은 감시 + 시작 노드 서버를하고 있으며, 모든 파일 변경시 dist 디렉토리 변경을 감시하는 nodemon을 사용하여 노드 서버를 다시 시작합니다.

9. 최종 노트

  • 서버는 dist / index.js 파일을 메인 파일로 실행합니다.
  • dist / index.js 파일은 src / index.js에서 컴파일되므로 프로젝트의 메인 파일이 있어야합니다.
  • dist 디렉토리는 git에 의해 무시되도록 추가되어야합니다 (하지만 노드 패키지 일 경우 npm에 대해서는 무시하지 마십시오)

10. 서버를 실행하고 src 디렉터리에 앱 생성을 시작합니다 .

npm run serve

II. 더 쉬운 방법 (상용구 사용 준비)

포인트가 너무 많으면 github- https: //github.com/maciejsikora/node-express-babel-boilerplate에서 전체 워킹 상용구를 사용할 수 있습니다 .


문제이 transpilation 그냥 JS 파일을 변환하고 내부 노드 모듈을 포함하지 않습니다
stackdave

1
같은 초 빌드 명령 생성 - "빌드 - 모듈을": "바벨 노드 모듈 / -d DIST /"
마치에이 시코


6

당신은 설치해야 babel-register하고 babel-preset-es2015에 사용되는 사전 babel-register사용 변환하는 옵션 ES6ES5즉석 transpilation

 npm install babel-register

 npm install babel-preset-es2015

당신의 run.js 파일 :

// require babel-register and set Babel presets options to es2015
require('babel-register')({
   presets: [ 'es2015' ]
});

require("./app.js6");

주의 사항 : 지금 당신은 필요가 없습니다 .babelrc세트에 파일을 Babel presets우리가 그것을 설정 등의 옵션을 require방법


1
프로덕션 사용에 대한 경고가 있습니다. babeljs.io/docs/setup/#installation 프로덕션 사용을 위한 것이 아닙니다. require hook은 주로 간단한 경우에 권장됩니다.
WitVault

이 경우 프로덕션에서 내 앱을 어떻게 실행합니까? 내 파일을 es5로 컴파일해야합니까? : /
sandiprb

@sandip_rb 예 프로덕션으로 이동하기 전에 파일을 컴파일해야합니다. 이 솔루션이 node.js지원되지 않는 버전 ES6(4.x 미만 버전)에서 작동하는지 확인해야합니다 . 현재 node.js버전 지원 ES6
ahmed hamdy

@sandip_rb 생산에 바벨 사용에 대한 유용한 링크보기-> medium.com/@Cuadraman/…
ahmed hamdy

6
  1. node -r babel-register scripts.js

이것이 최고의 솔루션입니다

  1. npx babel-node scripts.js

! Babel 노드는 종료 프로세스의 경우 잘 작동하지 않으며 kexec패키지 도이 경우에 도움이되지 않습니다 (내가 시도한대로)

두 경우 모두 .babelrc앱에 대한 사전 설정 및 플러그인을 설명 하는 것을 사용해야합니다.

npxnpm또는로 설치되지 않은 라이브러리의 실행에만 사용됩니다 yarn. 그렇지 않으면 당신이 필요 npm i -g babel-cli다음과babel-node script.js


노드 -r 매력 같은 scripts.js 작업을 바벨 등록 및 DEV에서 매우 간단합니다
Nditah

3

같은 전화를 선호합니다 nodejs6 app.js6.

babel-core api로 래퍼 솔루션을 시도 할 수 있습니다.

// Save as es6.js

var babel = require("babel-core");
var argc = process.argv.length;

babel.transformFile(process.argv[argc - 1], function (err, result) {
    eval(result.code);
});

es6 추천 스크립트 실행 node es6 thefile.js

참조 : 공식 사용 문서


1

바벨 6부터는 babel-register다음을 설치 하고 사용해야합니다.

require("babel-register");

babel es2015 사전 설정도 설치해야합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.