노드에서 es6 가져 오기를 어떻게 사용합니까? [복제]
이 질문에는 이미 답변이 있습니다.
노드에서 es6 가져 오기를 중단하려고 하는데이 예제에 제공된 구문을 사용하려고합니다.
지원 테이블을 통해 찾고 있습니다 : http://node.green/ ,하지만 현재 노드 8.1을 실행중인 새 가져 오기 문을 지원하는 버전을 찾을 수 없었습니다 (텍스트 가져 오기 / 요구 사항을 찾았습니다). 또한 치트 시트는 .js 파일을 참조하므로 .js 파일과 함께 작동해야한다고 생각합니다.
코드를 실행할 때 (치트 시트의 첫 번째 예제에서 가져온) :
import { square, diag } from 'lib';
SyntaxError : 예기치 않은 토큰 가져 오기 오류가 발생합니다.
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.js에는 ES6 지원에 대한 실험 지원이 포함되어 있습니다. https://nodejs.org/api/esm.html 에서 자세히 알아보십시오 .
TLDR; .mjs
확장자 가 ES6 모듈 인 파일을 저장 하고 다음과 같이 실행하십시오.
node --experimental-modules my-app.mjs
Node.js는 ES6 모듈을 지원하지 않습니다. James의이 블로그 는 그 이유를 설명합니다. Babel 을 사용하여 ES6 모듈 구문을 사용할 수 있습니다 .
또한 esm 이라는 npm 패키지 를 사용하여 노드에서 ES6 모듈을 사용할 수 있습니다. 구성이 필요하지 않습니다. esm을 사용하면 JS 파일에서 내보내기 / 가져 오기를 사용할 수 있습니다.
터미널에서 다음 명령을 실행하십시오.
yarn add esm
또는
npm install esm
그런 다음 노드로 서버를 시작할 때이 패키지가 필요합니다. 예를 들어, 노드 서버가 index.js 파일을 실행하는 경우 다음 명령을 사용합니다
node -r esm index.js
다음과 같이 package.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
자세한 내용은 이 링크 를 확인 하십시오
약 3 시간을 낭비했습니다.
방금 import
and 및 export
js 파일 을 사용하고 싶었습니다 .
누구나 불가능하다고 말합니다. 그러나 2018 년 5 월 현재 babel 등과 같은 모듈없이 일반 node.js에서 위를 사용할 수 있습니다.
간단한 방법은 다음과 같습니다.
아래 파일을 작성하고 실행하여 직접 출력하십시오.
또한 Explanation
아래 를 보는 것을 잊지 마십시오 .
myfile.mjs
function myFunc() {
console.log("Hello from myFunc")
}
export default myFunc;
index.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
- 출력에서 실험 모듈로 실행하는 동안 "(node : 12020) ExperimentalWarning : ESM 모듈 로더가 실험 중입니다."라는 메시지가 표시됩니다.
- 노드 js의 현재 릴리스가 있으므로 실행
node --version
하면 LTE / 안정된 / 권장 버전이 8.11.2 LTS이지만 "v10.3.0"이 표시됩니다. - 언젠가는 기능이 Experimental 대신에 안정적이기 때문에 .mjs 대신 .js를 사용할 수 있습니다.
- 실험 기능에 대한 자세한 내용은 https://nodejs.org/api/esm.html을 참조하십시오.
도움이 되었기를 바랍니다.
Node 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')
package.json 파일에이 필드가 있으면 ECMAScript 모듈 인 모든 모듈을 .mjs 확장자를 사용하지 않고도 가져올 수 있습니다.
"type": "module"
따라서 그러한 package.json 파일을 작성중인 모듈과 같은 폴더에 저장하십시오.
ECMAScript 모듈 지원으로 업데이트되지 않은 모듈을 가져 오려면 다음과 같이하십시오.
// 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')
물론 모듈 가져 오기를 사용하여 실제로 스크립트를 실행하려면 이것이 필요하다는 것을 잊지 마십시오.
node --experimental-modules my-script-that-use-import.js
그리고 상위 폴더에는 해당 스크립트가 가져 오기 구문에 대해 불평하지 않도록하려면이 package.json 파일이 필요합니다.
{
"type": "module"
}
사용하려는 모듈이 가져 오기 구문을 사용하여 가져 오기를 지원하도록 업데이트되지 않은 경우 require를 사용하는 것 외에 다른 선택은 없습니다 (그러나 위의 솔루션으로는 문제가되지 않습니다).
서버 측에서 모듈 시스템을 사용하는 경우 Babel을 전혀 사용할 필요가 없습니다. NodeJS에서 모듈을 사용하려면 다음을 확인하십시오.
- --experimental-modules 플래그 를 지원하는 노드 버전을 사용하십시오.
- 귀하 의 .js 파일은 다음에 이름을 바꿀 수 있어야합니다.mjs
그게 다야.
그러나 이것은 크지 만, 시니 순수한 ES6 코드는 NodeJS와 같은 환경에서 실행되지만 (9.5.0 작성) 여전히 테스트하기 위해 트랜스 필링의 기미가 있습니다. 또한 Ecma는 새로운 기능이보다 정기적으로 제공되므로 Javascript의 릴리스주기가 더 빨라질 것이라고 언급했습니다. NodeJS와 같은 단일 환경에서는 이것이 문제가되지 않지만 브라우저 환경과는 조금 다릅니다. 테스트 프레임 워크는 따라 잡는 데 많은 도움이된다는 것이 분명합니다. 프레임 워크 테스트를 위해 여전히 번역 작업을 수행해야합니다. jest를 사용하는 것이 좋습니다.
또한 번들링 프레임 워크에 대해 알고 있어야합니다.
시도해 볼 수 있습니다 esm
.
다음은 몇 가지 소개입니다. https://www.npmjs.com/package/esm
Jonathan002 의 원래 질문으로 돌아 가기
"... 새로운 ES6 import 문을 지원하는 버전은 무엇입니까?"
Axel Rauschmayer 의 기사를 기반으로 Node.js 10.x LTS에서 기본적으로 (실험 명령 행 플래그없이) 지원할 계획이 있습니다 . node.js의 2018 년 3 월 29 일 릴리스 계획 에 따르면 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 앱 내에서 잘 작동했습니다.
"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')
Link Node.JS에서 ES6 가져 오기를 활성화하는 방법 https://timonweb.com/posts/how-to-enable-es6-imports-in-nodejs/
은 Using .mjs
인 ECMAScript를 가능하게하기 위해 확장하는 것은 (허용 대답에 제안) 작품은, 그러나, Node.js를의 V12과 함께, 당신은 또한 세계적으로이 기능을 활성화 할 수 있습니다 모듈 package.json
.
가장 가까운 상위 package.json에 "type": "module"이 포함 된 경우 .js 및 확장 파일이없는 import 문은 ES 모듈로 처리됩니다.
{
"type": "module",
"main": "./src/index.js"
}
(물론 --experimental-modules
앱을 시작할 때 여전히 플래그를 제공 해야합니다).
이것이 귀하의 경우에 효과가 있는지는 모르겠지만 다음과 같이 Express 서버를 실행하고 있습니다.
nodemon --inspect ./index.js --exec babel-node --presets es2015,stage-2
노드 버전 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
'IT story' 카테고리의 다른 글
ng-class를 사용하는 AngularJS 토글 클래스 (0) | 2020.04.25 |
---|---|
0 값을 제거하지 않고 목록에서 None 값을 제거 (0) | 2020.04.25 |
LIKE 절에서 대괄호를 어떻게 피할 수 있습니까? (0) | 2020.04.25 |
tmux 모드에서 vim colorscheme을 잃으십시오 (0) | 2020.04.25 |
Java에서 휘발성과 동기화의 차이점 (0) | 2020.04.25 |