Node.js에서 ES6 가져오기를 사용하려면 어떻게 해야 합니까?
Node.js에서 ES6 가져오기의 요령을 파악하고 있으며 다음 예제에서 제공하는 구문을 사용하려고 합니다.
치트시트 링크
지원 표를 살펴보고 있지만 새 가져오기 문을 지원하는 버전을 찾을 수 없었습니다(텍스트 가져오기/요구 사항을 찾아 보았습니다).저는 현재 Node.js 8.1.2를 실행하고 있으며, 또한 치트시트가 .js 파일을 참조하고 있으므로 .js 파일과 함께 작동해야 한다고 생각합니다.
코드를 실행할 때(치트시트의 첫 번째 예에서 따옴):
import { square, diag } from 'lib';
오류가 발생했습니다.
구문 오류:예기치 않은 토큰 가져오기입니다.
가져오려는 라이브러리에 대한 참조:
//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
return x * x;
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}
내가 놓치고 있는 것은 무엇이며 어떻게 얻을 수 있습니까?node
나를 알아보는 것은import
진술서?
Node.js에는 ES6 지원에 대한 실험적 지원이 포함되어 있습니다.자세한 내용은 여기를 참조하십시오. https://nodejs.org/docs/latest-v13.x/api/esm.html#esm_enabling
TLDR;
Node.js > = v13
Node.js 13 이상에서는 매우 간단합니다.다음 중 하나를 수행해야 합니다.
- 을 다으로파로 합니다.
.mjs
확장자 - 더하다
{ "type": "module" }
곳에package.json
.
ECMA스크립트 모듈을 사용하려면 위의 작업 중 하나만 수행하면 됩니다.
노드.js <= v12
Node.js 버전 9.6 - 12를 사용하는 경우 ES6 모듈로 파일을 저장합니다..mjs
다음과 같이 확장 및 실행합니다.
node --experimental-modules my-app.mjs
Node.js에서 ES6 모듈을 사용할 수 있는 esm이라는 npm 패키지도 사용할 수 있습니다.구성할 필요가 없습니다.esm을 사용하면 JavaScript 파일에서 내보내기/가져오기를 사용할 수 있습니다.
터미널에서 다음 명령을 실행합니다.
yarn add esm
또는
npm install esm
그런 다음 노드로 서버를 시작할 때 이 패키지가 필요합니다.예를 들어 노드 서버에서 index.js 파일을 실행하는 경우 다음 명령을 사용합니다.
node -r esm index.js
패키지에 추가할 수도 있습니다.이런 json 파일.
{
"name": "My-app",
"version": "1.0.0",
"description": "Some Hack",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node -r esm index.js"
},
}
그런 다음 터미널에서 이 명령을 실행하여 노드 서버를 시작합니다.
npm start
자세한 내용은 이 링크를 참조하십시오.
저는 단지 그것을 사용하고 싶었습니다.import
그리고.export
JavaScript 파일에 있습니다.
모두가 불가능하다고 합니다.그러나 2018년 5월 현재, Babel과 같은 모듈 없이 일반 Node.js에서 위의 내용을 사용할 수 있습니다.
여기 간단한 방법이 있습니다.
아래 파일을 만들고 실행하여 출력을 직접 확인합니다.
또한잊지말보세요고보세요▁see고를 보는 것도 잊지 마세요.Explanation
파일 myfile.mjs
function myFunc() {
console.log("Hello from myFunc")
}
export default myFunc;
파일 인덱스.mjs
import myFunc from "./myfile.mjs" // Simply using "./myfile" may not work in all resolvers
myFunc();
달려.
node --experimental-modules index.mjs
산출량
(node:12020) ExperimentalWarning: The ESM module loader is experimental.
Hello from myFunc
설명:
- 실험 모듈이기 때문에 .js 파일의 이름은 .mjs 파일입니다.
- 실행중추수있다니습할가를 합니다.
--experimental-modules
에▁node index.mjs
- 출력에서 실험 모듈을 사용하여 실행하는 동안 다음과 같이 표시됩니다. "(노드:12020) 실험 경고:ESM 모듈 로더는 실험용입니다."
- Node.js를
node --version
LTE/안정적/권장 버전은 8.11.2 LTS이지만 "v10.3.0"을 제공합니다. - 나중에 .mjs 대신 .js를 사용할 수 있게 되면 Experimental 대신 기능이 안정화됩니다.
- 실험 기능에 대한 자세한 내용은 https://nodejs.org/api/esm.html 을 참조하십시오.
Node.js v12.2.0을 사용하여 다음과 같은 모든 표준 모듈을 가져올 수 있습니다.
import * as Http from 'http'
import * as Fs from 'fs'
import * as Path from 'path'
import * as Readline from 'readline'
import * as Os from 'os'
내가 전에 했던 것과 비교하면,
const
Http = require('http')
,Fs = require('fs')
,Path = require('path')
,Readline = require('readline')
,Os = require('os')
ECMA스크립트 모듈인 모듈은 패키지에 이 필드가 있는 한 .mjs 확장자를 사용하지 않고 가져올 수 있습니다.json 파일:
"type": "module"
그러니 그런 소포를 꼭 넣어주세요.당신이 만들고 있는 모듈과 같은 폴더에 있는 json 파일.
또한 ECMA스크립트 모듈 지원으로 업데이트되지 않은 모듈을 가져오려면 다음과 같이 하면 됩니다.
// Implement the old require function
import { createRequire } from 'module'
const require = createRequire(import.meta.url)
// Now you can require whatever
const
WebSocket = require('ws')
,Mime = require('mime-types')
,Chokidar = require('chokidar')
물론 모듈 가져오기를 사용하여 스크립트를 실제로 실행하려면 이 작업이 필요합니다(v13.2 이후에는 필요하지 않음).
node --experimental-modules my-script-that-use-import.js
상위 폴더에 이 패키지가 필요합니다.가져오기 구문에 대해 불평하지 않는 스크립트의 json 파일:
{
"type": "module"
}
사용할 모듈이 가져오기 구문을 사용하여 가져오기를 지원하도록 업데이트되지 않은 경우 require를 사용하는 것 외에 다른 방법이 없습니다(그러나 위의 내 솔루션에서는 문제가 없습니다).
또한 누락된 부분을 구현하는 이 코드를 공유하고 싶습니다.__filename
그리고.__dirname
모듈의 상수:
import {fileURLToPath} from 'url'
import {dirname} from 'path'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
서버 측에서 모듈 시스템을 사용하는 경우에는 Babel을 전혀 사용할 필요가 없습니다.Node.js에서 모듈을 사용하려면 다음 사항을 확인합니다.
- --experimental-modules 플래그를 지원하는 노드 버전 사용
- 그런 다음 *.js 파일의 이름을 *.mjs로 변경해야 합니다.
바로 그겁니다.
그러나 이는 매우 중요하지만, 당신의 빛나는 순수 ES6 코드는 Node.js(예: 9.5.0)와 같은 환경에서 실행될 것이지만, 당신은 여전히 테스트를 하기 위해서만 파일을 전송하는 미친 짓을 할 것입니다.또한 Ecma는 JavaScript의 릴리스 주기가 더욱 빨라지고 새로운 기능이 보다 정기적으로 제공될 것이라고 언급했습니다.Node.js와 같은 단일 환경에서는 문제가 없지만 브라우저 환경에서는 약간 다른 제안입니다.분명한 것은 테스트 프레임워크가 따라잡는 데 많은 역할을 한다는 것입니다.여전히 테스트 프레임워크를 위해 transfile이 필요할 수 있습니다.저는 Jest를 사용하는 것을 제안합니다.
또한 번들 프레임워크에 유의해야 합니다.당신은 그곳에서 문제에 부딪힐 것입니다.
사용:
"devDependencies": {
"@babel/core": "^7.2.0",
"@babel/preset-env": "^7.2.0",
"@babel/register": "^7.0.0"
}
파일 .babelrc
{
"presets": ["@babel/preset-env"]
}
Node.js 응용 프로그램의 진입점:
require("@babel/register")({})
// Import the rest of our application.
module.exports = require('./index.js')
Node.js에서 ES6 가져오기를 사용하도록 설정하는 방법을 참조하십시오.
시도해 보세요esm
.
몇 가지 소개합니다: esm
사용.mjs
ECMA스크립트 모듈을 활성화하기 위한 확장(승인된 답변에서 제안된 대로)이 작동합니다.그러나 Node.js v12를 사용하면 이 기능을 전체적으로 사용하도록 설정할 수도 있습니다.package.json
파일.
공식 문서에는 다음이 명시되어 있습니다.
.js 및 확장자 없는 파일의 import 문은 가장 가까운 상위 패키지인 경우 ES 모듈로 처리됩니다.json에 "type": "type"이 포함되어 있습니다.
{
"type": "module",
"main": "./src/index.js"
}
(물론 여전히 플래그를 제공해야 합니다.--experimental-modules
응용 프로그램을 시작할 때.)
Jonathan002의 원래 질문으로 돌아갑니다.
새로운 ES6 Import 문을 지원하는 버전은 무엇입니까?"
Dr.의 기사에 근거합니다. Axel Rauschmayer, Node.js 10.x LTS에서 실험 명령줄 플래그 없이 기본적으로 지원할 계획입니다.2018년 3월 29일 현재 node.js의 출시 계획에 따르면 2018년 4월 이후에 출시될 가능성이 있으며 LTS는 2018년 10월에 시작될 예정입니다.
해결책
https://www.npmjs.com/package/babel-register
// This is to allow ES6 export syntax
// to be properly read and processed by node.js application
require('babel-register')({
presets: [
'env',
],
});
// After that, any line you add below that has typical ES6 export syntax
// will work just fine
const utils = require('../../utils.js');
const availableMixins = require('../../../src/lib/mixins/index.js');
아래는 *mixins/index.js 파일의 정의입니다.
export { default as FormValidationMixin } from './form-validation'; // eslint-disable-line import/prefer-default-export
내 Node.js CLI 애플리케이션에서 잘 작동했습니다.
이것이 당신의 경우에 효과가 있을지는 모르겠지만, 저는 다음과 같은 방법으로 Express.js 서버를 실행하고 있습니다.
nodemon --inspect ./index.js --exec babel-node --presets es2015,stage-2
이를 통해 Node.js 버전 8만 사용하더라도 스프레드 연산자를 가져와서 사용할 수 있습니다.
babel-cli, babel-preset-es2015, babel-preset-stage-2를 설치해야 제가 하는 일을 할 수 있습니다.
언급URL : https://stackoverflow.com/questions/45854169/how-can-i-use-an-es6-import-in-node-js
'bestsource' 카테고리의 다른 글
스택을 역방향으로 적용하는 방법은 무엇입니까? (0) | 2023.05.14 |
---|---|
WPF에 대한 자바의 대답은 무엇입니까? (0) | 2023.05.09 |
정렬된 배열 처리가 정렬되지 않은 배열보다 느린 이유는 무엇입니까? (0) | 2023.05.09 |
Python 3 온라인 인터프리터 / Shell (0) | 2023.05.09 |
술어 대리자란 무엇이며 어디에서 사용해야 합니까? (0) | 2023.05.09 |