ES6 구문을 지원하기 위해 babel-node 및 babelify 변환으로 browserify를 사용하여 사이트를 개발했습니다.
노드에서 ES6를 실행하는 데 필요한 다른 옵션이 babel-node server
아닌 프로덕션에서 이것을 실행할 수 있는지 궁금 node server
합니다.
다음은 빌드 및 개발 시작을 위해 실행중인 명령입니다.
// npm run build
browserify -t [babelify] client.js > public/js/bundle.js",
// npm start
babel-node server.js"
내 개발 종속성은 다음과 같습니다.
"babel": "^4.0.1",
"babelify": "^5.0.3",
"browserify": "^8.0.3"
답변
클라이언트 측 코드의 경우 올바른 일을하고 있습니다. babelify
그것을 클라이언트에게 발송하십시오.
서버 측 코드의 경우 babel-cli를 사용하여 일반 빌드를 수행합니다.
에 따르면 http://babeljs.io/docs/setup/#babel_register ,
babel-register
되어 생산에는 적합하지 – 훅은 주로 간단한 경우에 권장됩니다 필요합니다.
Babel 6+ 용
Babel 6부터는 기본적으로 변환이 포함되지 않습니다. 이제 babel-cli
및 babel-preset-es2015
.
$ npm install --save-dev babel-cli babel-preset-es2015
.babelrc
파일에 변형을 추가하십시오. 이것은 위에서 다운로드 한 perst 모듈입니다. 자신에게 가장 적합한 프리셋 을 확인 하려면 전체 사전 설정 목록을 살펴보십시오 .
{
"presets": ["es2015"]
}
에 build
스크립트를 추가 합니다 package.json
. 아래 src
는 입력 파일이며 build
변환 된 출력 파일입니다.
"scripts": {
"build": "babel src -d build"
}
그런 다음 구축하십시오!
$ npm run build
그런 다음 코드를 실행하십시오. 이 시점에서 build
디렉토리 의 파일을 실행하고 싶을 것입니다.
$ npm start
Babel <= 5의 경우 require 후크를 사용하십시오.
require("babel/register");
확장자가 .es6 , .es , .jsx 및 .js 인 노드에 필요한 모든 후속 파일 은 Babel에 의해 변환됩니다. polyfill는 자동으로 필요합니다.
소스 파일을 ES6에 보관할 수 있지만 여전히 다음을 사용하여 실행할 수 있습니다. node server.js
귀하의 의견에 따르면 약간의 문제가있는 것 같습니다. 위의 노란색으로 강조 표시된 부분에 특히주의하십시오. 첫 번째 파일은 노드 자체에서 실행되는 ES5 만 될 수 있습니다. 모두이후의 요구 사항 은 Babel에 의해 변형됩니다.
일반적인 설정은 다음과 같습니다.
server.js
// only ES5 is allowed in this file
require("babel/register");
// other babel configuration, if necessary
// load your app
var app = require("./app.js");
app.js
// this file will be loaded through babel
// you can now use ES6 here and in every other include
발사!
$ node server.js
답변
Babeljs CLI 설명서 는 다음을 경고합니다.
생산 용이 아닌 바벨 노드
프로덕션에서 babel-node를 사용해서는 안됩니다. 캐시가 메모리에 저장되어 메모리 사용량이 많아 불필요하게 무겁습니다. 또한 전체 앱을 즉시 컴파일해야하므로 항상 시작 성능 저하를 경험하게됩니다.
이것은 babel-node 대신 node로 앱을 실행하도록 npm 스크립트를 설정하는 방법의 예입니다.
"scripts": {
"clean": "rm -rf build && mkdir build",
"build-css": "node-sass scss/app.scss public/css/app.css",
"build-server": "babel -d ./build ./server -s",
"build": "npm run clean && npm run build-css && npm run build-server",
"lint": "eslint source/ --quiet",
"start": "node ./build/index.js",
"debug": "node --debug ./build/index.js",
"test": "for i in $(ls tests/); do babel-node \"./tests/${i}\" | faucet ; done",
"validate": "npm run lint; npm run test && npm outdated --depth 0"
},
블로그 게시물 에서 자세한 내용을 확인할 수 있습니다.
답변
프로덕션에서 바벨 노드를 사용할 때의 장단점을 비교하는 것이 중요합니다.
babel-node
상용 하드웨어에서 시작 비용에 0.5 초에서 1 초가 추가됩니다. 그러나 앱이 장기 실행 서버 인 경우 시작 비용은 그다지 중요하지 않습니다.- 추가 메모리 사용량을 측정하십시오. 예를 들어 내 앱 (시계열 데이터 읽기 및 처리)의 경우 20MB에 불과했습니다. 상황에 따라 중요 할 수도 있고 그렇지 않을 수도 있습니다.
반면에
- babel-node를 사용하면 개발이 직접 단순화됩니다. “빌드”스크립트가 필요하지 않으며 별도의
src
/lib
및dist
디렉토리 가 없습니다. - 당신이 경우
import
로컬 파일에서, 당신은에서 가져옵니다src/myutils
, 또는에서lib/myutils
? 사용babel-node
하면 해당 문제가 제거됩니다.
모듈 지원에만 Babel을 사용합니다. 이제 V8은 2017 년 1 월 10 일 에 모듈 에 대한 지원을 방금 출시했습니다 . 바라건대 우리는 몇 달 안에 Node에서 플래그 아래에있는 모듈 지원을 보게 될 것이며, Babel moot를 사용하는 이유가 될 것입니다.
답변
@cuadraman의 대답은 @naomik보다 더 정확합니다.
질문에 간단하게 대답하려면 : 아니요, babel-node
명시 적으로 호출해서는 안됩니다. babel-node
에서 사용하는 비공개 라이브러리입니다 babel-cli
.
공식 튜토리얼에는 https://github.com/babel/example-node-server 노드에서 시작하고 실행하는 데 필요한 모든 것이 있습니다 . 읽어! 나는 여러 가지 방법을 사용하는 오해의 소지가있는 블로그 튜토리얼을 너무 많이 발견했고이 기사를 따라가는 것이 가장 쉽다는 것을 알았습니다.
보너스 : 많은 사람들이 생각하는 것과는 달리, 모든 트랜스 파일 마법은 로컬에 설치할 수 있습니다 (를 사용하여 npm install --save-dev babel-cli nodemon babel-preset-es2015 babel-preset-stage-2
). 전 세계적으로 Babel 또는 도우미 모듈을 설치할 필요가 없습니다! 꽤 멋지다.
답변
