[javascript] Node.js-SyntaxError : 예기치 않은 토큰 가져 오기

나는 무엇이 잘못되었는지 이해하지 못한다. 노드 v5.6.0 NPM v3.10.6

코드:

function (exports, require, module, __filename, __dirname) {
    import express from 'express'
};

오류:

SyntaxError: Unexpected token import
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:387:25)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:140:18)
    at node.js:1001:3



답변

업데이트 3 : 노드 13 부터는 .mjs 확장명을 사용하거나 package.json에서 “type”: “module”을 설정할 수 있습니다. 당신은 하지 않는 사용에 필요한 --experimental-modules플래그를.

업데이트 2 : 노드 12 이후로 , .mjs확장을 사용하거나 "type": "module"package.json에서 설정할 수 있습니다. 그리고 --experimental-modules플래그로 node를 실행해야합니다 .

업데이트 : Node 9 에서는 플래그 뒤에서 활성화되며 .mjs확장을 사용합니다 .

node --experimental-modules my-app.mjs

import실제로 ES6의 일부 이지만 불행히도 기본적으로 NodeJS에서 아직 지원되지 않으며 브라우저에서 매우 최근에 지원되었습니다.

MDN이 노드 문제 에 대한 브라우저 호환성 표를 참조하십시오 .

Node.js의 ES6 모듈에 대한 James M Snell의 업데이트 (2017 년 2 월) :

작업이 진행 중이지만 시간이 좀 걸릴 것입니다. 현재 최소 1 년 정도는보고 있습니다.

지원이 기본적으로 표시 될 때까지 다음과 같은 기본 require문구 를 계속 사용해야 합니다.

const express = require("express");

NodeJS에서 새로운 ES6 / 7 기능을 사용하려면 Babel을 사용하여 컴파일 할 수 있습니다. 다음은 예제 서버 입니다.


답변

불행히도 Node.js는 import아직 ES6을 지원하지 않습니다 .

수행하려는 작업을 수행하려면 (Express 모듈 가져 오기)이 코드로 충분합니다.

var express = require("express");

또한 다음을 실행하여 Express를 설치했는지 확인하십시오.

$ npm install express

참고 항목 Node.js를 문서를 Node.js. 학습에 대한 자세한 내용은


답변

다른 답변에서 언급했듯이 Node JS는 현재 ES6 가져 오기를 지원하지 않습니다.

(현재로서는 편집 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프로젝트 루트에 파일을 작성 하십시오.

다음을 추가하십시오 (필요한 다른 babel 사전 설정을이 파일에 추가 할 수 있음).

    {
        "presets": ["env"]
    }

설치 babel-preset-env명령을 사용하여 npm install babel-preset-env --save다음 설치 babel-cli명령을 사용하여npm install babel-cli -g --save

이제 서버 또는 색인 파일이있는 폴더로 이동하여 다음을 사용하여 실행하십시오. babel-node fileName.js

또는 파일에 npm start다음 코드를 추가 하여 사용할 수 package.json있습니다.

    "scripts": {
        "start": "babel-node src/index.js"
    }


답변

오류 : SyntaxError : 예기치 않은 토큰 가져 오기 또는 SyntaxError : 예기치 않은 토큰 내보내기


솔루션 : 모든 수입품을 예로 변경

const express               = require('express');
const webpack               = require('webpack');
const path                  = require('path');
const config                = require('../webpack.config.dev');
const open                  = require('open');

또한 귀하의 변경 export default = foo;에를module.exports = foo;


답변

나는 충격 esm을받지 않았다. 이 작지만 강력한 패키지는 당신이 중 하나를 사용할 수 있습니다 import또는 require.

프로젝트에 esm 설치

$ npm install --save esm

esm을 사용하도록 노드 시작 스크립트 업데이트

node -r esm app.js

esm그냥 작동합니다. 나는 함께 시간의 톤을 낭비 .mjs하고 --experimental-modules만 찾아 .mjs이 사용하는 파일을 가져올 수 없습니다 파일 require또는 module.exports. 이것은 큰 문제 였지만 esm혼합하고 일치시킬 수 있으며 이해하기 만하면 esm됩니다.


답변

여전히 “가져 오기”를 사용할 수없는 경우 여기에서 처리 한 방법입니다 : 노드 친화적 인 요구로 변환하십시오. 예:

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

와 같다:

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


답변

babel 7 제안서
개발자 의존성을 추가 할 수 있습니까?

npm i -D @babel/core @babel/preset-env @babel/register

루트에 .babelrc를 추가하십시오.

{
"presets": [
  [
    "@babel/preset-env",
    {
      "targets": {
        "node": "current"
     }
    }
  ]
 ]
}

.js 파일에 추가하십시오.

require("@babel/register")

또는 cli에서 실행하는 경우 require 후크를 -r @ babel / register로 사용할 수 있습니다 (예 :

$node -r @babel/register executeMyFileWithESModules.js