[NODEJS] Node.js를 - 구문 에러 : 예기치 않은 토큰 가져 오기
NODEJSNode.js를 - 구문 에러 : 예기치 않은 토큰 가져 오기
해결법
-
1.업데이트 3 : package.json에 "모듈"노드 (13) 때문에, 당신은 .mjs 확장, 또는 세트 "유형"을 사용할 수 있습니다. 당신은 --experimental - 모듈 플래그를 사용할 필요가 없습니다.
업데이트 3 : package.json에 "모듈"노드 (13) 때문에, 당신은 .mjs 확장, 또는 세트 "유형"을 사용할 수 있습니다. 당신은 --experimental - 모듈 플래그를 사용할 필요가 없습니다.
업데이트 2 : package.json에 "모듈"노드 (12) 때문에, 당신은 .mjs 확장, 또는 세트 "유형"을 사용할 수 있습니다. 그리고 당신은 --experimental - 모듈 플래그 노드를 실행해야합니다.
업데이트 :에서 노드 9, 그것은 플래그 뒤에 가능하고, .mjs 확장자를 사용합니다.
node --experimental-modules my-app.mjs
가져 오기가 참으로 ES6의 일부이지만, 불행하게도 아직 기본적으로 NodeJS에서 지원하지 않으며, 매우 최근의 브라우저에서 지원을 착륙했습니다.
MDN에 브라우저의 compat 테이블이 노드 문제를 참조하십시오.
Node.js를 (2017 년 2 월)에 ES6 모듈에 제임스 M 스넬의 업데이트에서 :
기본적으로 업 지원 프로그램까지, 당신은 고전 필요로 문을 계속해야합니다 :
const express = require("express");
당신이 정말로 NodeJS의 새로운 ES6 / 7 기능을 사용하려면, 당신은 바벨을 사용하여 컴파일 할 수 있습니다. 여기에 예를 들어 서버입니다.
-
2.불행하게도, Node.js를 아직 ES6의 가져 오기를 지원하지 않습니다.
불행하게도, Node.js를 아직 ES6의 가져 오기를 지원하지 않습니다.
당신이 (익스프레스 모듈을 가져올 수) 뭘 하려는지 달성하기 위해,이 코드는 충분하다
var express = require("express");
또한, 당신이 Express를 실행하여 설치 할 수
$ npm install express
Node.js. 학습에 대한 자세한 내용은 Node.js를 문서를 참조하십시오
-
3.다른 답변에서 언급 한 바와 같이 노드 JS는 현재 ES6 수입을 지원하지 않습니다.
다른 답변에서 언급 한 바와 같이 노드 JS는 현재 ES6 수입을 지원하지 않습니다.
(지금부터, EDIT 2 판독)
이 문제에 대한 해결책을 제공 노드 JS에서 ES6 수입을 활성화합니다. 나는이 시도하고 나를 위해 일했다.
명령을 실행 :
npm install babel-register babel-preset-env --save-dev
이제 새 파일 (config.js)을 작성하고 다음 코드를 추가해야합니다.
require('babel-register')({ presets: [ 'env' ] }) // Import the rest of our application. module.exports = require('./your_server_file.js')
이제 오류를받지 않고 import 문을 작성할 수 있습니다.
도움이 되었기를 바랍니다.
편집하다:
당신은 당신이 위의 코드를 사용하여 만든 새 파일을 실행해야합니다. 내 경우는 config.js했다. 나는 실행해야합니다 그래서 :
node config.js
편집 2 :
실험을하는 동안, 나는이 문제에 대한 하나의 쉬운 해결책을 찾아 냈다.
프로젝트의 루트에 .babelrc 파일을 만듭니다.
다음 추가 (그리고 당신이 필요로하는 다른 바벨 사전 설정,이 파일에 추가 할 수 있습니다)
{ "presets": ["env"] }
바벨 프리셋-ENV --save를 설치 NPM 명령을 사용하여 바벨 프리셋-ENV를 설치 한 후 바벨 - CLI -g --save를 설치 NPM 명령을 사용하여 바벨 - CLI를 설치
지금, 당신의 서버 또는 인덱스 파일이있는 폴더로 이동하여 실행 : 바벨 노드 fileName.js
또는 당신은 당신의 package.json 파일에 다음 코드를 추가하여 NPM 시작을 사용하여 실행할 수 있습니다 :
"scripts": { "start": "babel-node src/index.js" }
-
4.오류 : 구문 에러를 : 예기치 않은 토큰 가져 오기 또는 구문 에러 : 예기치 않은 토큰 수출
오류 : 구문 에러를 : 예기치 않은 토큰 가져 오기 또는 구문 에러 : 예기치 않은 토큰 수출
해결 방법 : 예를 들어 같은 변화는 모든 수입
const express = require('express'); const webpack = require('webpack'); const path = require('path'); const config = require('../webpack.config.dev'); const open = require('open');
또한 내보내기 기본 = foo는 변경; module.exports = foo는에;
-
5.나는 ESM이 언급되지 않은 충격을거야. 이 작지만 강력한 패키지는 하나 가져 오기를 사용하거나 필요로 할 수 있습니다.
나는 ESM이 언급되지 않은 충격을거야. 이 작지만 강력한 패키지는 하나 가져 오기를 사용하거나 필요로 할 수 있습니다.
프로젝트에서 ESM 설치
--save ESM을 설치 NPM $
사용 ESM에 노드 시작 스크립트를 업데이트
우리는 t이 Ob.js 이름을 싶습니다
ESM은 작동합니다. 난 단지 사용이 필요하거나 module.exports하는 파일을 가져올 수 없습니다 .mjs 파일을 찾아 .mjs 및 --experimental - 모듈 시간의 톤을 낭비. ESM은 당신이 믹스 앤 매치 할 수있는 반면이, 큰 문제이고 그것은 단지 그것을 파악 ... ESM은 작동합니다.
-
6.내가 그것을 처리하는 방법을 여전히 사용할 수없는 경우에는 "가져 오기"여기에 있습니다 : 그냥 친화적 필요한 노드로 번역합니다. 예:
내가 그것을 처리하는 방법을 여전히 사용할 수없는 경우에는 "가져 오기"여기에 있습니다 : 그냥 친화적 필요한 노드로 번역합니다. 예:
import { parse } from 'node-html-parser';
와 같다:
const parse = require('node-html-parser').parse;
-
7.바벨 7 제안 당신은 dev에 종속성을 추가 할 수 있습니다
바벨 7 제안 당신은 dev에 종속성을 추가 할 수 있습니다
npm i -D @babel/core @babel/preset-env @babel/register
루트에 .babelrc를 추가
{ "presets": [ [ "@babel/preset-env", { "targets": { "node": "current" } } ] ] }
과의 .js 파일에 추가
require("@babel/register")
당신은 CLI에서 실행하는 경우 또는, 당신은이 -r @ 바벨 / 레지스터, 전 등의 후크를 필요로 사용할 수 있습니다.
$node -r @babel/register executeMyFileWithESModules.js
-
8.아래로 - (프리셋 = es2015)는 '바벨'을 사용할 수 있는지, package.json에 빌드 스크립트를 추가하려고합니다. 그것은 es2015에 사전 컴파일 수입 코드를 만들
아래로 - (프리셋 = es2015)는 '바벨'을 사용할 수 있는지, package.json에 빌드 스크립트를 추가하려고합니다. 그것은 es2015에 사전 컴파일 수입 코드를 만들
"build": "babel server --out-dir build --presets=es2015 && webpack"
-
9.(이 지금 아마 상당히 안정, 그러나 아직도 "실험"으로 표시), 당신이 파일 (Node.js를에 ESM (ECMAScript를 모듈)을 사용하기위한 몇 가지 방법이 Node.js를의 V12로, evaling에 대한 세 번째 방법이 문자열), 여기에 문서의 말씀입니다 :
(이 지금 아마 상당히 안정, 그러나 아직도 "실험"으로 표시), 당신이 파일 (Node.js를에 ESM (ECMAScript를 모듈)을 사용하기위한 몇 가지 방법이 Node.js를의 V12로, evaling에 대한 세 번째 방법이 문자열), 여기에 문서의 말씀입니다 :
-
10.내가 명시 적으로 시작되었을 때 대신 항상 필요로 사용 가져 오기에 대한 솔루션을 원
내가 명시 적으로 시작되었을 때 대신 항상 필요로 사용 가져 오기에 대한 솔루션을 원
const express = require("express"); // to import express from "express"
이 라인을 통해 많은 시간 이동 : - 불행하게도, Node.js를 아직 ES6의 가져 오기를 지원하지 않습니다.
이제 도움말을 여기 새로운 두 가지 솔루션을 다른 만들
1) 이름 : -
훌륭하게 간단 바벨없는, 번들이없는 ECMAScript를 모듈 로더. 하자가 작동하게
yarn add esm / npm install esm
start.js를 만들거나 네임 스페이스를 사용
require = require("esm")(module/*, options*/) // Import the rest of our application. module.exports = require('./src/server.js') // where server.js is express server start file
start.js 당신의 package.json 통과 경로 변경
"scripts": { "start": "node start.js", "start:dev": "nodemon start.js", }, "dependencies": { + "esm": "^3.2.25", }, "devDependencies": { + "nodemon": "^1.19.2" }
2) 바벨 JS : -
이 두 부분으로 분할 될 수있다
A) 솔루션 timonweb.com 1 개 감사
b) 용액 2
사용 바벨 6 (이전 버전 바벨 출하 단계 3 ^ 6.0) 루트 폴더에 .babelrc 파일을 생성
{ "presets": ["env", "stage-3"] }
설치 바벨 프리셋을 단계 3
yarn add babel-cli babel-polyfill babel-preset-env bable-preset-stage-3 nodemon --dev
package.json의 변화
"scripts": { + "start:dev": "nodemon --exec babel-node -- ./src/index.js", + "start": "npm run build && node ./build/index.js", + "build": "npm run clean && babel src -d build -s --source-maps --copy-files", + "clean": "rm -rf build && mkdir build" }, "devDependencies": { + "babel-cli": "^6.26.0", + "babel-polyfill": "^6.26.0", + "babel-preset-env": "^1.7.0", + "babel-preset-stage-3": "^6.24.1", + "nodemon": "^1.19.4" },
서버를 시작합니다
yarn start / npm start
우없고 우리는 새로운 문제를 만들
regeneratorRuntime.mark(function _callee(email, password) { ^ ReferenceError: regeneratorRuntime is not defined
코드에서 비동기 / await를 사용하는 경우이 오류는 온다. 그런 다음 사용자 정의 재생기 런타임 및 코어 JS를 포함 polyfill을 사용합니다. 하는 index.js의 상단에 추가
import "babel-polyfill"
이 비동기 / await를 사용할 수 있습니다
사용 바벨 (7)
개까지 최신 필요 프로젝트의 모든 것 바벨 시작하자 7 .babelrc
{ "presets": ["@babel/preset-env"] }
package.json의 일부 변경
"scripts": { + "start:dev": "nodemon --exec babel-node -- ./src/index.js", + "start": "npm run build && node ./build/index.js", + "build": "npm run clean && babel src -d build -s --source-maps --copy-files", + "clean": "rm -rf build && mkdir build", .... } "devDependencies": { + "@babel/cli": "^7.0.0", + "@babel/core": "^7.6.4", + "@babel/node": "^7.0.0", + "@babel/polyfill": "^7.0.0", + "@babel/preset-env": "^7.0.0", + "nodemon": "^1.19.4" .... }
시작 지점에서 사용 가져 오기 "@ 바벨 / polyfill"
import "@babel/polyfill" import express from 'express' const app = express() //GET request app.get('/', async (req, res) { // await operation res.send('hello world') }) app.listen(4000, () => console.log('🚀 Server listening on port 400!'))
시작 당신은 왜 생각하고 : dev에
진심으로. 당신이 새로운 경우 그것은 좋은 질문이다. 당신이 시작 서버마다와 멧돼지있는 모든 변경 다음 원사 시작을 사용 dev에 개발 서버로 변경 될 때마다 다시 시작 서버를 자동으로 더 많은 nodemon에
-
11.내 경우는 .babelrc 파일 이후에보고되었고,이 같은 것을 포함한다 :
내 경우는 .babelrc 파일 이후에보고되었고,이 같은 것을 포함한다 :
{ "presets": ["es2015-node5", "stage-3"], "plugins": [] }
-
12.나는 다른 사람이없는 것을 원래의 질문에서 또 다른 문제를 해결하기 위해거야. 프로젝트 최근에 내 자신의 NodeJS에서 ESM에 CommonJS에서 변환 한 후, 나는 당신이 수 요구처럼 당신이 장소 수입은 당신이 원하는 수없는 곳이라는 사실에 대해 거의 논의를 보았다. 내 프로젝트는 현재 수입과 함께 큰 작업입니다,하지만 난 문제의 코드를 사용할 때, 내가 먼저 명명 된 기능을 갖는하지 않는 오류가 발생합니다. 기능을 명명 한 후, 나는 다음을받을 ...
나는 다른 사람이없는 것을 원래의 질문에서 또 다른 문제를 해결하기 위해거야. 프로젝트 최근에 내 자신의 NodeJS에서 ESM에 CommonJS에서 변환 한 후, 나는 당신이 수 요구처럼 당신이 장소 수입은 당신이 원하는 수없는 곳이라는 사실에 대해 거의 논의를 보았다. 내 프로젝트는 현재 수입과 함께 큰 작업입니다,하지만 난 문제의 코드를 사용할 때, 내가 먼저 명명 된 기능을 갖는하지 않는 오류가 발생합니다. 기능을 명명 한 후, 나는 다음을받을 ...
import express from 'express' ^^^^^^^ SyntaxError: Unexpected identifier at Loader.moduleStrategy (internal/modules/esm/translators.js:88:18)
당신이 필요로 할 수처럼 당신은 함수 내부의 수입을 배치 할 수 없습니다. 그들은 파일, 외부 코드 블록의 상단에 배치해야합니다. 나는이 문제를 자신에 꽤 많은 시간을 낭비.
위의 모든 답변이 도움에 큰 동안 그래서 당신은 당신의 프로젝트 없음 주소에 원래의 질문의 코드가 기록되지 일 수 있다는 사실을 일에 수입을 얻는다.
-
13.이 (가 바벨을 사용)처럼 나는 종종 github의 스타터 프로젝트를 사용
이 (가 바벨을 사용)처럼 나는 종종 github의 스타터 프로젝트를 사용
-
14.간단히 노드의 상위 버전을 설치합니다. 노드까지로 V10의 ES6는 지원되지 않습니다. 당신은 몇 가지 플래그 나 사용을 중지해야
간단히 노드의 상위 버전을 설치합니다. 노드까지로 V10의 ES6는 지원되지 않습니다. 당신은 몇 가지 플래그 나 사용을 중지해야
from https://stackoverflow.com/questions/39436322/node-js-syntaxerror-unexpected-token-import by cc-by-sa and MIT license
'NODEJS' 카테고리의 다른 글
[NODEJS] Node.js를 사용하여 명령 줄 바이너리를 실행 (0) | 2020.09.16 |
---|---|
[NODEJS] 동기 및 비동기 프로그래밍의 차이 (Node.js를 단위) 란 (0) | 2020.09.16 |
[NODEJS] NPM package.json 파일에 종속 devDependencies 및 peerDependencies의 차이점은 무엇입니까? (0) | 2020.09.16 |
[NODEJS] package.json에서 물결표 (~)와 캐럿의 차이 (^)은 무엇입니까? (0) | 2020.09.16 |
[NODEJS] Node.js를 + Nginx에 - 지금 무엇? (0) | 2020.09.16 |