Node.js의 최신 주요 릴리스는 업데이트 된 JavaScript 엔진, NPM 버전 5, Google의 V8, Node.js API, Async_hooks, Whatwg URL 파서,보다 안전한 버퍼 등을 포함하여 JavaScript 커뮤니티에 많은 중요한 개선을 가져옵니다. 여기서이 릴리스의 다른 가장 중요한 측면에서 이러한 기능과 다른 방법으로 업데이트 할 것입니다.
Node.js 8은 코드 이름 탄소 아래에서 해제되며 현재에서 사용할 수 있습니다. node.js 사이트 ...에 유지 보수 모드로 들어가기 전에 다른 18 개월 동안 적극적으로 작동 (새로운 기능, 버그 수정, 보안 개선 및 NPM 업데이트가 없음). 이전 릴리스와 마찬가지로 유지 관리 모드 릴리스에서는 중요한 보안 업데이트 및 버그 수정 만 수신합니다.
node.js가 주변에 있으므로 런타임이 수신 된 가장 큰 업데이트 중 하나이므로 기본 부가 기능이 작성되는 방법을 변경하고 추가 보안 및 성능 향상을 변경합니다.
Risingstack 훈련, 컨설팅 또는 개발로 4 년간 노드 .JS로 성공할 수 있도록 돕고 있습니다. 우리가 가진 가장 큰 투쟁 중 하나는 프로젝트에 기본 종속성을 추가하고있었습니다.
node.js 8 이전의 응용 프로그램이 기본 코드가있는 모듈에 종속 된 경우, 주요 새 노드 .js 버전이 도착할 때마다 응용 프로그램 관리자가 종속성을 다시 컴파일해야했습니다. 운이 좋았다면 그들은 처음에 일했습니다.
이 프로세스는 엄청난 작업 모듈 관리자가 호환되지 않는 노드 .js 버전에서 모듈을 작동시켜 주로 NAN (node.js 원시 추상 조각)이라는 모듈의 도움을 받아야합니다.
이 프로세스는 많은 회사가 컴파일 될 수 없으면 많은 회사가 업데이트되지 않고 모듈 유지 관리자에 거대한 추가 작업 부하를 넣을 수 있으므로 이상적입니다. 이 문제를 해결하기 위해 Node.js API (또는 N-API)가 도입되었습니다.
node.js API는 node.js 8의 가장 중요한 개선 중 하나입니다. 가상 시스템 불가지론을 만들기 위해 잘 정의 된 ABI (응용 프로그램 바이너리 인터페이스)를 노드에 제공합니다. 즉, 네이티브 모듈은 Google의 V8 JavaScript 엔진을 사용하여 다른 Node.js 버전과 함께 작동 할뿐만 아니라 Microsoft의 Chakra와도 사용할 수 있습니다.
지금은 N-API가 실험 상태에 있으며, 이는 구현 및 API 모두에 상당한 변경이 발생할 수 있습니다. 이와 함께 원시 모듈 관리자는 새로운 인터페이스를 시험 해보고 피드백을 제공하는 것이 좋습니다.
모듈 유지 관리자 인 경우 기본 모듈 버전과 병렬로 N-API 버전의 모듈을 릴리스 할 수 있습니다. 이렇게하려면 공식 권장 사항은 NPM에 N-API 태그가있는 모듈 버전을 게시하는 것입니다.
N-API 버전을 게시하려면 다음을 수행해야합니다.
이렇게하면 N-API 버전이 최신 릴리스가되지 않도록하므로 누군가가 모듈을 설치하는 경우 기본적으로 비 -PI 버전을 얻을 수 있습니다.
원사, Facebook 엔지니어가 만든 패키지 관리자는 2016 년 10 월에 출시되었습니다. 공식 NPM 고객의 몇 가지 단점을 해결하려고 시도했으며, 주로 더 많은 성능과 결정 론적으로 옮겨졌습니다. 이러한 혁신의 대부분은 NPM 5에도 특징입니다.
원사와 마찬가지로 NPM 5는 프로젝트에 새로운 종속성을 설치할 때마다 잠금 파일 메커니즘을 도입했으며 자동으로 추가되지 않습니다. package.json. ,하지만 새 파일이 호출되었습니다 package-lock.json. 게다가.
그 차이점이 무엇인지 물어볼 수 있습니다 package-lock.json. 과 npm-shrinkwrap.json. , NPM-shinkwrap이 영원히 이후 NPM에 있었기 때문에? 긴 이야기가 짧고, 그들은 본질적으로 동일하지만 package-lock.json. 자동으로 생성됩니다.
그들의 목적은 귀하의 패키지에 대해 어떤 종속성 트리 NPM이 작성 해야하는지 정확히 설명하는 것입니다. 둘 다 가지고 있다면, npm-shrinkwrap. 우선합니다. NPM의 권고 사항을 기반으로 사용해야합니다 npm-shrinkwrap.json. 게시하려는 경우 모듈 소비자가 사용할 수 있습니다. 반면에, 내부적으로 Package-Lock.json을 사용해야합니다. 심지어 Repositories로 확인하십시오.
그러나 NPM 5 개선은 새 버전으로 잠금 파일을 추가하여 중지되지 않았습니다. 설치중인 모든 모듈은 자동으로 저장되며 둘 다에 모두 추가됩니다. package.json. 과 package-lock.json. 파일.
NPM 스크립트가 작동하는 방식은 또한 조금 변경되었습니다. 우선, 사전 설치된 스크립트는 이제 다른 모든 것보다 먼저 실행되므로 CLI가 실제로 읽기 전에 node_modules 디렉토리를 수정할 수 있습니다. 이 외에도 두 개의 새로운 스크립트가 추가되었습니다 - 프레프 백 및 포스트 팩. 둘 다 NPM 팩과 NPM을 출시하지만 NPM 설치에는 사용할 수 없습니다.
Node.js의 핵심은 JavaScript 코드를 해석하고 ByteCode를 작성하고 응용 프로그램을 실행할 수있게 해주는 JavaScript 엔진입니다. New Node.js 8 릴리스에서는 업데이트되었습니다.
업데이트 된 V8 엔진을 사용하면 주요 성능 향상이 도입되지만 더 중요한 것은 순환 호환 응용 프로그램 바이너리 인터페이스를 보장합니다. 즉, node.js는 주요 노드 .js 릴리스없이 V8 엔진을 업데이트 할 수 있음을 의미합니다.
V8 엔진의 최신 버전이 새로운 컴파일러 파이프 라인을 소개하면서 Node.j의 성능 향상을 도입 할 수있는 새로운 버전의 새로운 버전이 발생할 수 있으므로 이것은 중요합니다. 이 업데이트는 원래 노드 8의 릴리스 날짜가 연기 된 이유가 중요했습니다.
현재 파이프 라인은 너무 복잡하고 새로운 언어 기능을 소개하는 것은 일반적으로 파이프 라인의 여러 부분을 만지는 것을 의미합니다. 새로운 파이프 라인을 사용하면 훨씬 더 간단해질 것입니다.
새로운 인터프리터, 새로운 최적화 컴파일러 인 새로운 인터프리터 및 Turbofan은 거의 3 년 반 동안 개발 중이 었습니다. 그들은 새로운 언어 기능이 지어지는 기초입니다. 여기에는 Google의 V8 팀이 실제 JavaScript 응용 프로그램을 측정하는 것으로 수집 된 경험이 포함됩니다.
비동기 후크가 무엇인지 더 잘 이해하기 위해 단계를 다시 가져 와서 계속해서 지속적인 스토리지를 먼저 사용할 수있게 해 봅시다. 스레드 프로그래밍에서 스레드 로컬 스토리지처럼 작동하지만 node.js에서 콜백을 사용하여 컨텍스트를 전달합니다.
데이터베이스에서 제품을 가져 오는 응용 프로그램을 작성한 다음 나중에 HTML 응답으로 보내 드리겠습니다.
const creatEnAmespace = 요구 ( '연속 로컬 저장소'). createNamespace
const 세션 = createNamespace ( 'my-app-session')
const db = require ( './ db.js')
기능 OnRequest (옵션, 다음) {
DB.FETCHUSERBYID (옵션 .ID, 함수 (오류, 사용자) {
if (error) {
다음 (오류)
}
session.set ( '사용자', 사용자)
다음()
})
나중에 사용자 객체에 액세스하려면 해당 사용자 개체에 액세스해야합니다. 로컬 저장소에서 가져 오는 것입니다.
const getNamespace = 요구 ( '계속 - 로컬 저장소'). GetNamespace
const 세션 = getNamespace ( '내 세션')
const render = require ( './ render.js')
기능 완료 (응답) {
const user = session.get ( '사용자')
렌더링 ({사용자 : 사용자}). 파이프 (응답)
}
이 기술은 RisingStack의 추적과 같은 응용 프로그램 성능 모니터링 공급자가 실행 컨텍스트를 유지하고 프로덕션 시스템에서 모니터링 정보를 수집하는 것과 같은 응용 프로그램 성능 모니터링 공급자가 광범위하게 사용할 수 있습니다.
비동기 후크를 사용하면 유사한 기능이 Node.js 코어로 이동됩니다. 이는 비동기 요청 및 핸들러를 수명주기를 통해 추적하는 데 도움이됩니다. 그만큼 Async_hooks. 모듈은 노드 .js 응용 프로그램에서 작성된 비동기 리소스의 수명을 추적하는 콜백을 등록하는 API를 제공합니다.
Node.js 8 이전에는 약속을 사용하는 응용 프로그램에서 핵심 모듈을 사용하고 싶은 경우 수동으로 핵심 모듈을 래핑하여 동일한 방식으로 사용할 수 있도록했습니다. 그것은 다음과 같이 보였습니다 :
const fs = 요구 ( 'fs')
함수 ReadFilePromise (... args) {
새 약속 반환 ((해결, 거부) = & gt; {
fs.readfile (... args, (err, result) = & gt; {
if (err) {
반환 확인 (Err)
}
해결 (결과)
})
})
}
ReadFilePromise ( './ package.json', 'UTF-8')
.then ((res) = & gt; console.log (res))
.catch ((Err) = & gt; console.log (Err))
node.js 8을 사용하면 새로운 헬퍼 메소드가 UTIL 코어 모듈에 추가됩니다. 표준 Node.js 콜백 스타일 API를 약속을 리턴하는 함수로 래핑 할 수 있습니다.
이 기능을 사용하면 위의 스 니펫이 단순화되어 다음이됩니다.
const fs = 요구 ( 'fs')
const promisify = 요구 ( 'util'). 추위
ReadFilePromise = 약속 (fs.readfile)
ReadFilePromise ( './ package.json', 'UTF-8')
.then ((res) = & gt; console.log (res))
.catch ((Err) = & gt; console.log (Err))
Node.js 버전 8 이전에는 새 버퍼 (Number) 생성자를 사용하여 할당 된 버퍼는 0으로 메모리 공간을 초기화하지 않았습니다. 결과적으로 새로운 버퍼 인스턴스에는 중요한 정보가 포함될 수 있으므로 심각한 보안 문제가 발생하여 몽구스, WS 또는 요청 모듈과 같은 대중적인 모듈조차도 영향을 받았습니다.
그러나 우리가 어떻게 거기에 도달 했습니까? 브라우저에서 서버 측으로 JavaScript를 이동했을 때 빠르고 쉬운 데이터 처리가 필요했습니다. 버퍼 클래스가 추가되었습니다. 버퍼는 바이너리 데이터의 변경 가능한 배열입니다. 새 버퍼의 크기를 묻는 생성자와 함께 사용하면 메모리 공간을 예약했지만 청소하지 않았습니다.
서버가 동시에 여러 사용자에게 서비스 할 수 있으므로 (브라우저와 달리) 갓 할당 된 메모리 공간이 다른 사용자 (비밀번호도!)의 중요한 정보가 포함되어 있으며 잠재적으로 공격자에게 노출 될 수 있습니다.
새로운 버퍼 창조의 성과를 높이기위한 의도적 인 결정 이었지만, 우리 대부분의 경우 의도 된 용도가 아니 었습니다. 이 때문에 Node.js 8부터 새 버퍼 (Number) 또는 버퍼 (숫자)를 사용하여 할당 된 버퍼가 자동으로 0으로 채워집니다.
node.js 8, node.js 응용 프로그램을 디버깅하려면 가장 쉬운 솔루션 중 하나는 노드 디버그를 사용하여 기본 제공 디버거를 시작하는 것이 었습니다. index.js. node.js 8을 사용하면 노드 검사기로 제거되고 대체됩니다. CLI 디버거를 계속 사용할 수는 있지만 곧 제거됩니다.
이제부터는 노드를 사용해야합니다 - 인덱스 index.js. 또는 노드 - 인센트 - BRK index.js. 디버거가 응용 프로그램의 첫 번째 줄에 중단 점을 넣으려면 실행하면 Google 크롬이 디버거를 연결하는 데 사용할 수있는 WebSocket 링크를 받게됩니다.
너는까지 가야한다 크롬 : // 검사 Chrome 브라우저에서는 실행중인 노드 설명서 응용 프로그램을 자동으로 인식하여 연결할 수 있습니다. 프로세스에 연결 한 후에는 Chrome의 디버거가 실행중인 node.js 응용 프로그램을 검사합니다.
이전에는 런타임에받은 오류를 확인하고 그에 따라 오류를 확인하고 대부분의 경우 오류 메시지를 확인해야했습니다. 오류 메시지가 새 노드 .js 버전으로 변경되었을 수 있으므로 오류가 발생하기 쉽습니다.
node.js 8을 사용하면 정적 오류 코드가 대부분의 오류에 할당되었습니다. 오류의 메시지가 수행 되더라도 이러한 오류 코드가 변경되지 않아도됩니다. ...에
예를 들어 새로 소개 된 것입니다 Whatwg URL API. 던질 것입니다 err_invalid_url. 매개 변수가 유효한 URL이 아닌 경우 다음 스 니펫의 오류가 발생했습니다.
const url = 요구 ( 'URL'). URL
const myUrl = new url ( '/ foo')
알 수 있듯이 Node.js 8 업데이트의 릴리스는 JavaScript 커뮤니티에 대한 새로운 새롭고 흥미로운 개선을 가져 왔습니다. 이 모든 새로운 기능을 직접 실험하기 위해 nodejs.org. node.js 8 바이너리를 다운로드하고 새 툴 세트로 재생을 시작하십시오!
이 기사는 원래 나타났습니다 그물 잡지 문제 296. 여기 그것을 구입하십시오 ...에
관련 기사:
(이미지 크레디트 : Google) Google 슬라이드가 점점 더 인기가 높아지고 있습니다. 세계가 �..
(이미지 크레디트 : Simon Baek) 시각적 개발이란 무엇입니까? 글쎄, 그것은 이야기를 시각�..
Adobe Capture CC는 사진을 찍어 글꼴과 색상을 찾을 수있는 환상적인 앱입니다. 예를 들어, 좋아하는 잡지에서 글꼴이 어떤 글꼴을 사용했는지 궁금..