복붙노트

[NODEJS] Node.js를 - 구문 에러 : 예기치 않은 토큰 가져 오기

NODEJS

Node.js를 - 구문 에러 : 예기치 않은 토큰 가져 오기

해결법


  1. 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. 2.불행하게도, Node.js를 아직 ES6의 가져 오기를 지원하지 않습니다.

    불행하게도, Node.js를 아직 ES6의 가져 오기를 지원하지 않습니다.

    당신이 (익스프레스 모듈을 가져올 수) 뭘 하려는지 달성하기 위해,이 코드는 충분하다

    var express = require("express");
    

    또한, 당신이 Express를 실행하여 설치 할 수

    $ npm install express
    

    Node.js. 학습에 대한 자세한 내용은 Node.js를 문서를 참조하십시오


  3. 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. 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. 5.나는 ESM이 언급되지 않은 충격을거야. 이 작지만 강력한 패키지는 하나 가져 오기를 사용하거나 필요로 할 수 있습니다.

    나는 ESM이 언급되지 않은 충격을거야. 이 작지만 강력한 패키지는 하나 가져 오기를 사용하거나 필요로 할 수 있습니다.

    프로젝트에서 ESM 설치

    --save ESM을 설치 NPM $

    사용 ESM에 노드 시작 스크립트를 업데이트

    우리는 t이 Ob.js 이름을 싶습니다

    ESM은 작동합니다. 난 단지 사용이 필요하거나 module.exports하는 파일을 가져올 수 없습니다 .mjs 파일을 찾아 .mjs 및 --experimental - 모듈 시간의 톤을 낭비. ESM은 당신이 믹스 앤 매치 할 수있는 반면이, 큰 문제이고 그것은 단지 그것을 파악 ... ESM은 작동합니다.


  6. 6.내가 그것을 처리하는 방법을 여전히 사용할 수없는 경우에는 "가져 오기"여기에 있습니다 : 그냥 친화적 필요한 노드로 번역합니다. 예:

    내가 그것을 처리하는 방법을 여전히 사용할 수없는 경우에는 "가져 오기"여기에 있습니다 : 그냥 친화적 필요한 노드로 번역합니다. 예:

    import { parse } from 'node-html-parser';
    

    와 같다:

    const parse = require('node-html-parser').parse;
    

  7. 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. 8.아래로 - (프리셋 = es2015)는 '바벨'을 사용할 수 있는지, package.json에 빌드 스크립트를 추가하려고합니다. 그것은 es2015에 사전 컴파일 수입 코드를 만들

    아래로 - (프리셋 = es2015)는 '바벨'을 사용할 수 있는지, package.json에 빌드 스크립트를 추가하려고합니다. 그것은 es2015에 사전 컴파일 수입 코드를 만들

    "build": "babel server --out-dir build --presets=es2015 && webpack"
    

  9. 9.(이 지금 아마 상당히 안정, 그러나 아직도 "실험"으로 표시), 당신이 파일 (Node.js를에 ESM (ECMAScript를 모듈)을 사용하기위한 몇 가지 방법이 Node.js를의 V12로, evaling에 대한 세 번째 방법이 문자열), 여기에 문서의 말씀입니다 :

    (이 지금 아마 상당히 안정, 그러나 아직도 "실험"으로 표시), 당신이 파일 (Node.js를에 ESM (ECMAScript를 모듈)을 사용하기위한 몇 가지 방법이 Node.js를의 V12로, evaling에 대한 세 번째 방법이 문자열), 여기에 문서의 말씀입니다 :


  10. 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. 11.내 경우는 .babelrc 파일 이후에보고되었고,이 같은 것을 포함한다 :

    내 경우는 .babelrc 파일 이후에보고되었고,이 같은 것을 포함한다 :

    {
      "presets": ["es2015-node5", "stage-3"],
      "plugins": []
    }
    

  12. 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. 13.이 (가 바벨을 사용)처럼 나는 종종 github의 스타터 프로젝트를 사용

    이 (가 바벨을 사용)처럼 나는 종종 github의 스타터 프로젝트를 사용


  14. 14.간단히 노드의 상위 버전을 설치합니다. 노드까지로 V10의 ES6는 지원되지 않습니다. 당신은 몇 가지 플래그 나 사용을 중지해야

    간단히 노드의 상위 버전을 설치합니다. 노드까지로 V10의 ES6는 지원되지 않습니다. 당신은 몇 가지 플래그 나 사용을 중지해야

  15. from https://stackoverflow.com/questions/39436322/node-js-syntaxerror-unexpected-token-import by cc-by-sa and MIT license