이 기사의 내용은 JavaScript에서 AMD와 ES6 모듈의 가져오기 및 내보내기 비교에 관한 것입니다(코드 예제). 필요한 친구가 참고할 수 있기를 바랍니다.
저희 프론트엔드는 개발 과정에서 import,export 기능을 자주 접하게 됩니다.
가져올 때는 require일 때도 있고, import일 때도 있습니다.
내보낼 때, module.exports일 때도 있고, import일 때도 있고, default일 때도 있습니다
오늘은 이러한 내용에 대해 간략하게 소개하겠습니다
import,export,export default
import,export,export default는 ES6 사양에 속합니다
import
import는 컴파일 프로세스 중에 실행됩니다
즉, 코드 실행 실행 전,
예를 들어 import 후 경로를 잘못 적으면 코드 실행 전에 오류가 발생합니다.
코드 작성 시 import를 js 앞에 쓸 필요는 없습니다
import 명령에는 개선 효과가 나타나며, 전체 모듈의 선두가 먼저 실행됩니다. (컴파일 단계에서 실행됩니다.)
Import는 정적으로 실행됩니다
import는 정적으로 실행되기 때문에 표현식과 변수는 사용할 수 없습니다. 즉 런타임에만 결과를 얻을 수 있는 구문 구조
예를 들어, if and else import
또 다른 예를 들어 from after import의 경로는 상대 경로일 수도 있고 절대 경로일 수도 있지만 변수를 기반으로 얻은 경로일 수는 없습니다
//import 路径不可以为变量 var url = './output' import { a, b } from url//这么写会报错 //------------------ //import 的引入与否不能和代码逻辑向关联 let status= true if(status){ import { a, b } from url//这么写会报错 }
import는 as
를 사용하여 이름을 바꿀 수 있습니다. imports 방법의 종류,
import foo from './output' import {b as B} from './output' import * as OBj from './output' import {a} from './output' import {b as BB} from './output' import c, {d} from './output'
import 방법은 내보내기와 어느 정도 관련이 있습니다. 아래에서 내보내기에 대해 이야기할 때 위의 가져오기 방법을 하나씩 소개하겠습니다.
exoprt와 내보내기 기본값을 함께 사용하기 때문입니다. 매우 큽니다
간단히 말하면: 내보내기는 내보내기이고 내보내기 기본값은 기본 내보내기입니다
모듈은 여러 개의 내보내기를 가질 수 있지만 내보내기 기본값은 하나만 있을 수 있으며 내보내기 기본값은 여러 개의 내보내기와 공존할 수 있습니다
export default는 기본 내보내기이고, 내보내기는 {}로 래핑된 객체이며 키-값 쌍의 형태로 존재합니다. 따라서 내보내기 방법이 다르면 가져오기 방법도 달라지므로 동일하게 가져오기 및 내보내기 방법을 사용하는 것이 좋습니다.
export 기본 해체 후 내보내기입니다두 가지 직관적인 데모를 통해 기본 내보내기와 내보내기의 차이점을 살펴보세요먼저 코드 조각 살펴보기(내보내기)
output.js
const a = 'valueA1' export {a}
import {a} from './output.js'//此处的import {a}和export {a},两个a是一一对应关系 console.log(a)//=>valueA1export {a}가 있는 위 코드에 주의하세요. 내보낸 a는 import {a}로 가져온 a와 동일합니다.
코드를 다시 살펴보세요(내보내기 기본값)
const a = 'valueA1' export default{a}
input.js
import a from './output.js'//此处的a和export default{a},不是一个a, console.log(a)//=>{ a: 'valueA1' }내보내기 기본값의 밤나무에 있는 input.js를 보면 약간 변경되었습니다.
import abc from './output.js'//此处的a和export default{a},不是一个a, console.log(abc)//=>{ a: 'valueA1' }몇 가지 변경을 했지만 출력은 변경되지 않았습니다. 가져오기는 내보내기 기본값에서 개체를 가져오므로 원하는 대로 호출할 수 있습니다. 내보내기 기본값exoprt와 내보내기 기본값이 함께 혼합되어 있습니다exoprt와 내보내기 일반적으로 이렇게 하지 않지만 동일한 모듈에서 기본값을 동시에 사용하는 것이 지원됩니다.
const a = 'valueA1' const b = 'valueB1' const c = 'valueC1' const d = 'valueD1' function foo() { console.log(`foo执行,c的值是${c}`); } export {a} export {b} export default { b,d,foo}
input.js
import obj, {a,b } from './output' console.log(a); //=>valueA1 console.log(b); //=>valueB1 console.log(obj); //=>{ b: 'valueB1', d: 'valueD1', foo: [Function: foo] }
은 exoprt를 통해 내보내지고 기본적으로 import가 도입되면 as를 통해 이름 바꾸기를 지원합니다. 여전히 위의
const a = 'valueA1' const b = 'valueB1' const c = 'valueC1' const d = 'valueD1' function foo() { console.log(`foo执行,c的值是${c}`); } export {a} export {b} export default { b,d,foo}
앞서 import{}와 내보내기{}는 일대일 대응이므로 내보내기에서 내보낸 항목은 가져오기에서 지원되지 않는다고 말했습니다.{}*
이것은 AMD 사양입니다
import {a as A} from './output' import {* as A} from './output'//这是不支持的 import * as obj from './output' console.log(A); //=>valueA1 console.log(obj); //=>{ a: 'valueA1',default: { b: 'valueB1', d: 'valueD1', foo: [Function: foo] },b: 'valueB1' }require 경로는 변수를 지원합니다
import {* as A} from './output'//这是不支持的 import * as obj from './output' console.log(obj); //=>{ a: 'valueA1',default: { b: 'valueB1', d: 'valueD1', foo: [Function: foo] },b: 'valueB1' }
내보내기 및 모듈입니다. 내보내기
AMD 사양에 따름let flag = true if (flag) { const a = require('./output.js') console.log(a); //支持 }
다음 두 가지 작성 방법은 동일합니다
let flag = true let url = './output.js' if (flag) { const a = require(url) console.log(a); //支持 }
const exports = module.exports;
exports.a ='valueA1' module.exports.a='valueA1'input.js
const exports = module.exports;다른 부분을 살펴보세요. code
output.js
const a = 'valueA1' const b = 'valueB1' const c = 'valueC1' module.exports = { c} exports.b = b//当直接给 module.exports时,exports会失效 module.exports.a = ainput.js
const obj = require('./output.js') console.log(obj); //=>{ c: 'valueC1', a: 'valueA1' }
当直接给 module.exports时,exports会失效
在ES6中export default 导出的是一个对象
在AMD中exports和module.exports导出的也都是一个对象
所以如果你手中的项目代码支持两种规范,那么事可以交叉使用的(当然不建议这么去做)
通过export导出的不一定是一个对象
output.js
//部分省略 module.exports = { c} module.exports.a = a
inputj.s
import obj from './output' import {a} from './output' console.log(a);//=>valueA1 console.log(obj);//=>{ c: 'valueC1', a: 'valueA1' }
output.js
const a = 'valueA1' const b = 'valueB1' const c = 'valueC1' function foo() { console.log(`foo执行,c的值是${c}`); } export {a} export default {b,c,foo} export {b}
input.js
const a = require('./output.js') console.log(a); //=>{ a: 'valueA1',default: { b: 'valueB1', c: 'valueC1', foo: [Function: foo] }, b: 'valueB1' }
当直接给module.export赋值时,exports会失效
本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript视频教程栏目!
위 내용은 JavaScript에서 AMD 및 ES6 모듈 가져오기 및 내보내기 비교(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!