Babel 과 ES7 을 사용 하여 JavaScript 모듈 만 들 기
작년 에 새로운 자 바스 크 립 트 가 발표 되 었 는데, 그것 은 매우 많은 새로운 장점 을 가지 고 있다.그 중 하 나 는 내 보 내기 모듈 을 가 져 오 는 문법 이 자 바스 크 립 트 모듈 로 정리 되 는 유일한 방법 이다.그래, 드디어 기 다 렸 다.또 다른 좋 은 일 은 모듈 전체 의존 트 리 를 정적 으로 분석 할 수 있 도록 편성 하 는 것 이다.정말 대단 합 니 다.
우리 이 문법 들 을 한 번 훑 어 봅 시다.
import v from "mod";
import * as obj from "mod";
import {x} from "mod";
import {x as v} from "mod";
import "mod";
export var v;
export default function f(){};
export default function(){};
export default 42;
export {x};
export {x as v};
export {x} from "mod";
export {x as v} from "mod";
export * from "mod";
따라서 기본적으로 모듈 ("default") 의 주요 값 을 가 져 오 거나 명시 적 으로 내 보 내기 (explicit exports) 에서 온 특정한 속성 이나 이 두 사람의 조합 또는 모든 것 을 가 져 올 수 있 습 니 다.이에 대응 하여 기본 모듈 에 값 을 내 보 내 거나 여러 속성 을 가 진 대상 도 내 보 낼 수 있 습 니 다.너 도 이 속성 들 을 하나씩 내 보 낼 수 있다.베 스 트 스타일 은 스타일 매 뉴 얼 을 참고 하 세 요.)
ES7 에는 이런 문법 에 대한 작은 보충 도 추가 됐다.
export * as ns from "mod";
export v from "mod";
특별한 것 은 없 지만, 우 리 는 언제 그것들 을 사용 할 수 있 습 니까?날 을 택 하 는 것 보다 날 을 택 하 는 것 이 낫다.많은 ES6 의 문법 적 특성 을 다 루 듯 이 현재 지원 하지 않 으 려 면 바벨 이라는 도구 로 ES5 로 번역 할 수 있다.일단 그들 을 지지 할 준비 가 되 어 있 으 면 바벨 이 번역 을 멈 추 게 할 수 있다.
구체 적 으로 어떻게 조작 하 는 지 살 펴 봅 시다.우 리 는 Node. js 와 NPM 에서 그것 을 실현 할 것 이다.이 파일 을 실행 해 보기;
src/letter_keys.js
// you would have a constant for each key
// (I would normally uppercase all constants)
const a = 119;
const d = 100;
const s = 115;
const w = 119;
// you would export all keys here
// note: you can't say `w: 119` here. It just isn't valid.
// This destructures to `w: w, a: a, ...`
export {
w,
a,
d,
s,
}
src/arrow_keys.js
const UP = 38;
const RIGHT = 39;
const DOWN = 40;
const LEFT = 37;
export {
UP,
RIGHT,
DOWN,
LEFT,
}
src/move.js
export {a, w, s, d} from './letter_keys';
export * as ARROWS from './arrow_keys';
index. js 메 인 파일 은 내부 모듈 내용 내 보 내기 에 사 용 됩 니 다. 이 키 들 이 다른 파일 에서 내 보 냈 다 고 가정 합 니 다.이 예 는 좀 이해 하기 어렵 지만, 이것 은 결코 큰 문제 가 없다.
src/index.js
import * as keys from './move';
console.log(keys);
이것 은 이 모듈 에 의존 하 는 어떤 항목 의 일부분 이 될 수 있다.awsd 키 와 화살표 대상 을 인쇄 해 야 합 니 다.npm 부터 시작 합 시다.repo dir 를 만 들 고 초기 화 합 니 다:
~$ mkdir foo
~$ cd foo
~/foo$ mkdir src
# put src files above in ~/foo/src
~/foo$ npm init -yes
~/foo$ npm install babel-cli babel-preset-es2015 babel-preset-stage-1 -D
시간 이 좀 걸 려 요.명령 행 에서 Babel (6) 을 실행 하 는 것 을 지원 하고
babel-cli
가방 은 관련 ES7 모듈 번역 도 구 를 제공 합 니 다 (본문 을 작성 할 때).babel-preset-stage-1
표 시 는 npm 에 기본 -yes
을 만 들 고 사용자 에 게 묻 지 않 습 니 다.package.json
표 시 는 -D
의 줄 임 말로 --save-dev
에 가방 을 package.json
항목 에 추가 합 니 다.현재 기본 babel 프로필 에 미리 설 정 된 파 라 메 터 를 추가 합 니 다:.babelrc
{
"presets": ["es2015", "stage-1"]
}
만약 이것 이 순조롭게 운행 할 수 있다 면, 다행이다. 미래 를 안 아 라!그러나 필자 가 본문 을 쓸 때 이런 예 들 은 ES6 에서 실행 할 수 없고 Node. js 는 말 할 필요 도 없다.이런 번역 절 차 를 거 쳐 어쨌든 그것들 은 실 행 될 수 있다.
현재 우리 가 추가 한 세 개의 dev 의존 도 를 포함 하 는 거의 비어 있 는 package. json 파일 이 있어 야 합 니 다.이 package. json 파일 에 스 크 립 트 를 추가 하여 번역 을 실현 합 니 다.
...
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"translate": "node_modules/babel-cli/bin/babel-node.js src/index.js"
},
...
("test" 줄 뒤에 만 "translate" 줄 과 쉼표 를 추가 합 니 다.
이 번역 스 크 립 트 는 컴 파일 절차 이다.글 의 끝 부분 에서 본문 (정식 버 전) 에서 사용 하 는 최종 패키지 제 이 슨 파일 을 찾 을 수 있 습 니 다.이제 npm 명령 을 호출 하여 스 크 립 트 를 실행 하여 번역 을 실현 하고 코드 를 실행 하 는 것 만 남 았 습 니 다.
~/foo$ npm run translate --silent
{ A: [Getter],
W: [Getter],
S: [Getter],
D: [Getter],
ARROWS: { UP: 38, RIGHT: 39, DOWN: 40, LEFT: 37 } }
화 이 팅!이제 추가 보상 으로 코드 를 헷 갈 리 게 하기 위해 Jscrambler 를 사용 할 수 있 습 니 다.우 리 는 바벨 이 번역 한 코드 를 전달 할 수 있 기 때문에 왜 이렇게 하지 않 습 니까?
우리 (최종) package. json 파일 은 다음 과 같 습 니 다.
package.json
{
"name": "foo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"translate": "node_modules/babel-cli/bin/babel-node.js src/index.js"
},
"keywords": [],
"author": "Your Name (http://localhost/)",
"license": "ISC",
"devDependencies": {
"babel-cli": "6.6.5",
"babel-preset-es2015": "6.6.0",
"babel-preset-stage-1": "6.5.0",
"jscrambler": "0.7.5"
}
}
여느 때 처럼 설정 을 완료 합 니 다.다음은 필자 가 사용 한 파일 입 니 다. (이 파일 이 어떻게 만 들 어 졌 는 지 깊이 알 고 싶 습 니 다. 이 를 예 로 들 어 NPM 에 관 한 문 서 를 더 얻 을 수 있 습 니 다)
.jscramblerrc
{
"keys": {
"accessKey": "See https://jscrambler.com/en/account/api_access",
"secretKey": "See https://jscrambler.com/en/account/api_access"
},
"params": {
"constant_folding": "%DEFAULT%",
"dead_code": "%DEFAULT%",
"dead_code_elimination": "%DEFAULT%",
"dictionary_compression": "%DEFAULT%",
"dot_notation_elimination": "%DEFAULT%",
"function_outlining": "%DEFAULT%",
"function-reorder": "%DEFAULT%",
"literal_duplicates": "%DEFAULT%",
"literal_hooking": "2;8",
"member_enumeration": "%DEFAULT%",
"mode": "nodejs",
"rename_local": "%DEFAULT%",
"string_splitting":"0.3",
"whitespace": "%DEFAULT%"
}
}
우 리 는 대본 한 토막 으로 모 았 다.이 스 크 립 트 는 Babel 로 원본 파일 을 번역 하여 / build 폴 더 로 출력 한 다음 Jscrambler 로 코드 를 혼동 한 다음 결 과 를 / dist 폴 더 에 넣 습 니 다. /dist 의 내용 은 ES7 의 어떠한 특성 도 사용 하지 않 고 정상적으로 실 행 될 수 있 습 니 다.
run.sh
#!/bin/sh
echo "Babelifying src/*.js"
node_modules/babel-cli/bin/babel.js -d build src/*.js
echo "Scrambling build/*.js"
node_modules/jscrambler/bin/jscrambler -o dist build/src/**
echo "Clean up artifacts"
mv dist/build/src/* dist/
rmdir dist/build/src
rmdir dist/build
echo "Done! See dist/scrambled.js"
echo "Running:"
node dist/index.js
준비 완료:
chmod +x run.sh
다음, 실행:
~/foo$ ./run.sh
Babelifying src/*.js
src/arrow_keys.js -> build/src/arrow_keys.js
src/index.js -> build/src/index.js
src/letter_keys.js -> build/src/letter_keys.js
src/move.js -> build/src/move.js
Scrambling build/*.js
Clean up artifacts
Done! See dist/ for your scrambled files
Running:
{ a: [Getter],
w: [Getter],
s: [Getter],
d: [Getter],
ARROWS: { UP: 38, RIGHT: 39, DOWN: 40, LEFT: 37 } }
/ dist 폴 더 에 가서 결 과 를 볼 수 있 습 니 다.결 과 는 원본 파일 과 는 거리 가 멀다. 이것 은 우리 가 Jscrambler 를 통 해 그것 을 보호 하지만 결 과 는 실행 할 수 있 기 때문이다.
튜 토리 얼 은 여기 서 마 치 겠 습 니 다. ES7 잘 쓰 세 요!
OneAPM 은 Node. js 응용 성능 병목 을 쉽게 잠 그 고 강력 한 Trace 기록 을 통 해 줄 급 문제 코드 를 잠 글 때 까지 분석 할 수 있 습 니 다.사용자 각도 에서 시스템 응답 속 도 를 보 여주 고 지역 과 브 라 우 저 차원 에서 사용자 의 사용 상황 을 통계 합 니 다.더 많은 기술 글 을 읽 으 려 면 OneAPM 공식 블 로 그 를 방문 하 세 요.
본 고 는 OneAPM 공식 블 로그 에서 이전 되 었 다.
원본 주소:https://blog.jscrambler.com/creating-modules-javascript-es7-babel/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.