“require (x)”와 import x의 차이점
MongoDB와 인터페이스 할 작은 노드 프로젝트 작업을 막 시작했습니다. 그러나 .NET을 통해 올바르게 설치 했음에도 불구하고 관련 노드 모듈을 올바르게 가져올 수없는 것 같습니다 npm
.
예를 들어, 다음 코드는 "express에 기본 내보내기가 없습니다"라는 오류가 발생합니다.
import express from "express";
그러나이 코드는 다음과 같이 작동합니다.
const express = require("express");
그래서 제 질문은 import 및 variable / require 메소드가 작동하는 방식의 차이점은 무엇입니까? 앞으로 추가 문제를 가능성이 있으므로 프로젝트에서 수입품을 괴롭히는 것이 무엇이든 수정하고 싶습니다.
차이를 이해하는 것이 나에게 도움이 대답 require
하고 import
있다 Node.js 를가 ES6 가져 오기 / 내보내기 대 필요 사용하여 간단한 다이어그램을 포함합니다.
가장 큰 차이점 require
하고 import
, 즉 require
자동으로 스캔 node_modules
모듈을 사용할 수 import
있습니다.
의 사람들은 대부분 사용 바벨을 컴파일 import
하고 export
만드는, import
같은 행동 require
.
Node.js의 판단 버전은 import
자체를 지원할 수 있습니다 (실제로 실험 버전은 이미 지원함 ) Node.js의 메모로 import
하면을 지원하지 않을 node_modules
ES6을 기반으로 모듈의 경로를 지정해야합니다.
그래서 import
바벨과 함께 사용하지 않는 것을 권합니다 만,이 기능은 아직 확인되지 않습니다 node_modules
. 앞으로 지원할 수 있을지 누가 알겠습니까?
참고로 다음은 바벨이 ES6의 import
구문을 CommonJS의 require
구문으로 변환하는 방법의 예입니다 .
파일 app_es6.js
에 다음 가져 오기 오기가 포함 되어 가정합니다 .
import format from 'date-fns/format';
노드 패키지 date-fns 에서 형식 함수 를 가져 오는 지시문 입니다.
관련 package.json
파일에는 다음과 같은 내용이 있습니다.
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
관련 .babelrc
파일은 다음과 같을 수 있습니다.
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
파일에 build-server-file
정의 된 이 펼쳐지 package.json
는 것은 babel이 app_es6.js
파일 을 구문 분석하고 파일을 출력하도록 지시하는 것입니다 app.js
.
build-server-file
펼쳐보기 실행 한 후 가져 오기 오기 를 사용 app.js
하면 다음과 같이 date-fns
변환 된 것을 볼 수 있습니다.
var _format = require("date-fns/format");
var _format2 = _interopRequireDefault(_format);
그 파일의 대부분은 대부분의 인간에게 우스꽝 스럽지만 컴퓨터는 그것을 이해합니다.
또한 참조를 위해 모듈을 만들고 프로젝트로 가져 오는 방법의 예로서 설치 date-fns
하고 열면 다음 node_modules/date-fns/get_year/index.js
이 된 포함을 볼 수 있습니다.
var parse = require('../parse/index.js')
function getYear (dirtyDate) {
var date = parse(dirtyDate)
var year = date.getFullYear()
return year
}
module.exports = getYear
위의 바벨 프로세스를 사용하면 파일에 다음이 사용 app_es6.js
됩니다.
import getYear from 'date-fns/get_year';
// Which year is 2 July 2014?
var result = getYear(new Date(2014, 6, 2))
//=> 2014
바벨은 수입을 다음과 같이 변환합니다.
var _get_year = require("date-fns/get_year");
var _get_year2 = _interopRequireDefault(_get_year);
그리고 그에 따라 함수에 대한 모든 참조를 처리하십시오.
필요 및 가져 오기에 익스프레스 모듈 포함에 대한 예를 들어 보겠습니다.
-필요
var express = require('express');
-수입
import * as express from 'express';
따라서 위의 문을 사용 후에는 'express'라는 변수가 생생합니다. 이제 '앱'을 다음과 같이 정의 할 수 있습니다.
var app = express();
따라서 'CommonJS'에는 'require'를, 'ES6'에는 'import'를 사용합니다.
'필수'및 '가져 오기'에 대한 자세한 내용은 아래 링크를 참조하십시오.
require- Node.js의 모듈 필요 : 알아야 할 모든 것
import- Node.js의 ES6 모듈에 대한 업데이트
여기에 대한 답변이 아니라 댓글과 비슷합니다. 죄송하지만 댓글을 달 수 없습니다.
노드 V10에서는 플래그 --experimental-modules
를 사용하여 Nodejs에 import
. 그러나 입력 스크립트는 .mjs
.
이것은 아직 실험적인 것이며 프로덕션에 사용 해서는 안됩니다 .
// main.mjs
import utils from './utils.js'
utils.print();
// utils.js
module.exports={
print:function(){console.log('print called')}
}
참고 URL : https://stackoverflow.com/questions/46677752/the-difference-between-requirex-and-import-x
'ProgramingTip' 카테고리의 다른 글
css 속성 값의! 기본값은 무엇을 의미합니까? (0) | 2020.11.08 |
---|---|
Firefox 리더보기는 어떻게 작동합니까? (0) | 2020.11.08 |
L1 캐시 미스 비용은 얼마입니까? (0) | 2020.11.08 |
std :: string을 파일에 쓰는 방법? (0) | 2020.11.08 |
const 키와 non const 키의 차이점은 무엇입니까? (0) | 2020.11.08 |