import 와 export 가 node.js 에서 의 사용 에 대한 상세 한 설명
import 와 export 는 es6 에서 모듈 화 된 가 져 오기 와 내 보 내기 입 니 다.node.js 는 현 단계 에서 지원 되 지 않 습 니 다.babel 을 통 해 컴 파일 하여 node.js 의 모듈 화 코드 로 만들어 야 합 니 다.(node.js 모듈 에 대해 서 는 다른 node.js 모듈 화 된 글 을 참고 할 수 있 습 니 다)
수출 노출
export 를 사용 하면 노출 방법,대상,문자열 등 을 폭로 할 수 있 습 니 다.다음 코드 입 니 다.
// 1
export var foo=function(){
console.log(1);
}
// 2
var bar ={a:"1",b:2};
export {bar};
// 3
var baz='hello world';
export {baz as qux};
그러면 위의 코드 는 babel 의 컴 파일 을 거 쳐 실행 가능 한 node.js 코드 로 바 뀌 었 습 니 다.다음 과 같 습 니 다.
"use strict";
// es
Object.defineProperty(exports, "__esModule", {
value: true
});
// 1
var foo = exports.foo = function foo() {
console.log(1);
};
// 2
var bar = { a: "1", b: 2 };
exports.bar = bar;
// 3
var baz = 'hello world';
exports.qux = baz;
위의 코드 를 보고 알 겠 습 니 다.es6 의 export 는 node.js 의 exports 노출 방식 으로 전 환 됩 니 다.import 가 져 오기
import 의 쓰기 방법 을 살 펴 보고 위 에 export 라 고 쓰 인 파일 xx.js 를 도입 합 니 다.
첫 번 째 표기 법
import {foo,qux} from './xx';
console.log(qux);
foo,qux 는 xx.js 에서 우리 가 드 러 낸 속성 입 니 다.xx.js 에서 드 러 난 속성 은 foo,bar,qux 3 개 입 니 다.이 를 통 해 알 수 있 듯 이 파일 에 드 러 난 속성의 이름 을 알 아야 하고 필요 에 따라 쓸 수 있 으 며 모든 속성 을 매 거 할 필요 가 없습니다.다음은 babel 이 컴 파일 한 코드 를 살 펴 보 겠 습 니 다.
'use strict';
var _ = require('./xx');
console.log(_.qux);
간단 한 require 방법 으로 xx.js 를 도입 하기 때문에 이런 방식 으로 우 리 는 es6 모듈 을 도입 할 수도 있 고 node.js 모듈 을 도입 할 수도 있다.두 번 째 표기 법
import * as xx from './xx';
console.log(xx.bar);
여 기 는 xx.js 를 도입 합 니 다.이 표기 법 은 xx.js 에서 드 러 난 속성 을 xx 라 는 변수 에 할당 합 니 다.(사실은 module.exports 에 별명 을 짓 는 것 입 니 다)babel 에 의 해 컴 파일 된 후 다음 과 같 습 니 다.
'use strict';
var _ = require('./xx');
var xx = _interopRequireWildcard(_);
function _interopRequireWildcard(obj) {
// node es
if (obj && obj.__esModule) {
return obj;
}
else {
var newObj = {};
if (obj != null) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key))
newObj[key] = obj[key];
}
}
// babel
newObj.default = obj;
console.log(newObj);
return newObj;
}
}
console.log(xx.bar);
위의 코드 를 보면 node 모듈 인지 es 모듈 인지 판단 할 수 있 습 니 다.이 쓰기 도 es 모듈 과 node 를 호 환 하 는 모듈 입 니 다.세 번 째 표기 법
import oo from './xx'
console.log(oo.bar);
이러한 쓰기 에서 oo 는 임 의 변수 입 니 다.얼핏 보면 두 번 째 쓰기 와 같 을 수 있 습 니 다.사실은 그렇지 않 습 니 다.컴 파일 된 코드 를 보 세 요.
'use strict';
var _ = require('./xx');
var _2 = _interopRequireDefault(_);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj :
{ default: obj };
}
console.log(_2.default.bar);
마지막 줄 에서 oo.bar 는 로 컴 파일 되 었 습 니 다.2.default.bar,default 이 하나 더 있 으 면 이곳 의 bar 는 당연히 찾 을 수 없 기 때문에 이러한 용법 은 export 의 속성 을 도입 하 는 것 이 아니 라 아래 에 말 할 export default 입 니 다.export default 노출 및 일회 성 노출
export 와 export default 는 다른 글 에서 정리 하 겠 습 니 다.여기 서 export default 의 용법 만 말 하고 코드 를 보 겠 습 니 다.
var foo=123;
export default foo;
babel 에 의 해 컴 파일 된 후
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = 123;
exports.default = foo;
마지막 줄 foo 를 보면 exports.default 에 부 여 됩 니 다.이 는 import oo from'./xx'라 는 쓰기 에 대응 하여 default 안의 속성 을 호출 하기 때문에 이 두 가지 용법 은 대응 합 니 다.속성의 값 이 exports.default 에 부여 되 는 이상 아래 의 용법 이 있 습 니 다.
export default 123;
export default {foo:123};
export default function f(){}
export default function (){}
위의 코드 는 따로 쓰 여 있 습 니 다.한 js 에서 export default 를 한 번 만 사용 할 수 있 기 때 문 입 니 다.이 유 는 module.exports 를 사용 하 는 것 과 마찬가지 로 여러 개 를 쓸 수 없 을 뿐만 아니 라 아래 도 잘못된 쓰기 입 니 다.
export default var foo=123; //
export default 는 클 라 스 를 드 러 내 는 데 도 사용 할 수 있 습 니 다.다른 용법
이어받다
여기 서 모듈 계승 이 라 고 하 는데 사실은 하나의 부모 모듈 이 서브 모듈 을 도입 한 다음 에 서브 모듈 에 노출 된 속성 을 드 러 내 는 것 입 니 다.
export * from './xx';
컴 파일 된 후
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _ = require('./xx');
Object.keys(_).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _[key];
}
});
});
아래 이 말 조심 하 세 요.
if (key === "default" || key === "__esModule") return;
default 속성 이 밖으로 드러나 지 않 습 니 다...이것 은 우리 가 도입 한 xx.js 이 파일 에서 exports default 를 사용 하 는 것 은 무효 입 니 다.대체 쓰기 방법 은?
export {default} from './xx';
계승 하 는 쓰 기 는 여러 모듈 을 구성 하 는 데 자주 사용 되 며,아래 에서 말 하고 자 하 는 패키지 와 함께 자주 사용 된다.폴 더 불 러 오기(패키지 불 러 오기)
많은 사람들 이 아래 의 이 코드 를 이해 하지 못 한다.
import * as o from './oo'; //oo
왜 import 는 폴 더 를 도입 할 수 있 습 니까?모든 폴 더 가 아 닙 니 다.그 안에 적어도 하나의 파일 이 index.js 또는 package.json 과 다른 이름 의 js 입 니 다.폴 더 안에 index.js 가 있 기 때문에 이것 은 폴 더 가 아니 라 node.js 의 가방 입 니 다.(node.js 가방 의 글 참조)import 는 babel 에 의 해 require 로 컴 파일 됩 니 다.require 는 지정 한 경로 의 가방 을 참조 할 수 있 습 니 다.따라서 import 는 폴 더 를 가 져 올 수 있 습 니 다.index.js 에 의존 하여 폴 더 의 다른 파일 코드 를 내 보 낼 수 있 습 니 다.예 를 들 어:
//index.js
export * from './1';
export * from './2';
우 리 는 import oo 라 는 폴 더 를 통 해 1.js,2.js 에 노출 된 속성 을 얻 을 수 있 습 니 다.총결산
babel 컴 파일 된 코드 를 보면 export 와 exports,module.exports 는 export default 의 용법 과 비슷 하 므 로 무엇 을 어떻게 사용 하 는 지 는 개인의 취향 에 달 려 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express.js에서 오류를 처리하는 간단한 방법Express에서 오류를 처리하는 여러 가지 방법이 있습니다. 이를 수행하는 일반적인 방법은 기본 익스프레스 미들웨어를 사용하는 것입니다. 또 다른 방법은 컨트롤러 내부의 오류를 처리하는 것입니다. 이러한 처리 방식...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.