programing

SyntaxError: 모듈 외부에서 Import 문을 사용할 수 없습니다.

shortcode 2023. 1. 28. 09:49
반응형

SyntaxError: 모듈 외부에서 Import 문을 사용할 수 없습니다.

ApolloServer 프로젝트가 있어서 업데이트해야겠다고 생각했고 최신 Babel을 사용할 때 문제가 발생했습니다."index.js"는 다음과 같습니다.

require('dotenv').config()
import {startServer} from './server'
startServer()

실행 시 오류가 발생합니다.

SyntaxError: Cannot use import statement outside a module

처음에 TPTB*가 (실패하지 않은) 모듈임을 납득시키기 위해 작업을 시도했습니다.그래서 "import"를 "require"로 변경했고, 이것이 효과가 있었습니다.

하지만 지금은 다른 파일에 24개 정도의 "imports"가 있어 동일한 오류가 발생합니다.

*문제의 근원은 이 문제에 대해 무엇이 불만인지조차 모른다는 것입니다.Babel 7이라고 생각했지만(Babel 6에서 와서 프리셋을 변경해야 했기 때문에) 100% 확신할 수 없습니다.

솔루션에 대해 찾은 대부분의 내용은 일반 노드에 적용되지 않는 것 같습니다.여기 이런 거 있잖아요.

ES6 모듈 Import에서 "Uncatched SyntaxError:예기치 않은 식별자"

"type=module"을 추가하면 해결되었다고 하는데, 일반적으로 HTML로 표시되며, HTML에는 해당 항목이 없습니다.또, 프로젝트의 낡은 프리셋을 사용해 보았습니다.

"presets": ["es2015", "stage-2"],
"plugins": []

그러나 "오류: 플러그인/Preset 파일은 개체를 내보낼 수 없습니다. 함수만 내보낼 수 있습니다."라는 또 다른 오류가 발생합니다.

처음에 사용한 의존관계는 다음과 같습니다.

"dependencies": {
"@babel/polyfill": "^7.6.0",
"apollo-link-error": "^1.1.12",
"apollo-link-http": "^1.5.16",
"apollo-server": "^2.9.6",
"babel-preset-es2015": "^6.24.1",

최신 버전의 Node.js가 설치되어 있는지(또는 13.2.0 이상) 확인합니다.다음으로 매뉴얼 설명에 따라 다음 중 하나를 수행합니다.

옵션 1

부모에게package.json 톱 의 「」, 「」를 합니다."type"이 " " "인 "module" 모든 「」가 됩니다..js ★★★★★★★★★★★★★★★★★」.mjs파일은 ES 모듈로 해석됩니다.개별 파일을 공통으로 해석할 수 있습니다.를 사용하여 JS를.cjs내선 번호

// package.json
{
  "type": "module"
}

옵션 2

이름을 으로 지정합니다..mjs(예:.jsCommonJS로은 Common의 경우 입니다.JS에 대해서요.이것은 디폴트입니다.type되어 있지 않습니다.package.json.

TypeScript에서 이 문제를 겪고 있는 사람이 있다면, 그 문제를 해결할 수 있는 열쇠가 바뀌었습니다.

    "target": "esnext",
    "module": "esnext",

로.

    "target": "esnext",
    "module": "commonjs",

의 마마 my에서는tsconfig.json요.esnext★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

" " " " " " " " " " " " " " " " .json " " " " " " " " " " . json " " , " ""type": "module"을 사용법

{
  "name": "my-app",
  "version": "0.0.0",
  "type": "module",
  "scripts": { ...
  },
  ...
}

공식 문서에 따르면:

import 문은 ES 모듈에서만 허용됩니다.CommonJS 의 같은 기능에 대해서는, import() 를 참조해 주세요.

Node.js에서 파일을 ES 모듈로 취급하려면 다음 작업을 수행해야 합니다(활성화).

  • 패키지에 "type"을 추가합니다.json
  • Node.js 호출에 "--experimental-modules" 플래그를 추가합니다.

나도 같은 문제에 부딪혔는데, 더 안 좋아."import"와 "require"가 모두 필요했습니다.

  1. 일부 새로운 ES6 모듈은 Import에서만 작동합니다.
  2. 일부 공통JS는 필요에 따라 동작합니다.

다음과 같은 이점이 있습니다.

  1. js 파일을 다른 답변에 제시된 대로 .mjs로 변환합니다.

  2. ES6 모듈에서는 "require"가 정의되어 있지 않기 때문에 다음과 같이 정의할 수 있습니다.

    import { createRequire } from 'module'
    const require = createRequire(import.meta.url);
    

    이제 'require'는 평상시처럼 사용할 수 있습니다.

  3. ES6 모듈에는 Import를 사용하고 CommonJ에는 import를 사용합니다.

유용한 링크:Node.js 자체 설명서 Import와 require의 차이점Mozilla에는 Import에 관한 훌륭한 문서가 있습니다.

같은 문제가 발생하여 다음과 같이 수정되었습니다(Node.js 12.13.1 사용).

  • .js " " "로.mjs
  • --experimental-modules앱을 실행할 때 플래그를 표시합니다.
  • " " 추가: ""type": "module" 안에서package.json

상세정보 : https://nodejs.org/api/esm.html

온갖 방법을 다 써봤지만 소용이 없었어요

GitHub에서 한 가지 레퍼런스를 받았습니다.

Node.js에서 TypeScript Import를 사용하기 위해 아래 패키지를 설치했습니다.

1. npm i typescript --save-dev

2. npm i ts-node --save-dev

패키지 내 모듈 유형은 필요하지 않습니다.json

예를들면,

{
  "name": "my-app",
  "version": "0.0.1",
  "description": "",
  "scripts": {

  },
  "dependencies": {
    "knex": "^0.16.3",
    "pg": "^7.9.0",
    "ts-node": "^8.1.0",
    "typescript": "^3.3.4000"
  }
}

저저설설설다다 first first first first를 설치하겠습니다.@babel/cli, @babel/core and @babel/preset-env:

npm install --save-dev @babel/cli @babel/core @babel/preset-env

그런 다음 Babel을 설정하기 위한 .babelrc 파일을 만듭니다.

touch .babelrc

그러면 Babel을 구성하는 옵션이 모두 호스트 됩니다.

{
  "presets": ["@babel/preset-env"]
}

최근에 Babel을 변경한 경우 Node.js에서 ES6를 실행하기 전에 ES6를 변환해야 합니다.

첫 번째 스크립트 build를 package.json 파일에 추가합니다.

"scripts": {
  "build": "babel index.js -d dist"
}

그런 다음 시작 스크립트를 package.json 파일에 추가합니다.

"scripts": {
  "build": "babel index.js -d dist", // replace index.js with your filename
  "start": "npm run build && node dist/index.js"
}

이제 서버를 시작합니다.

npm start

순서 1

yarn add esm

또는

npm i esm --save

순서 2

패키지.json

  "scripts": {
    "start": "node -r esm src/index.js",
  }

순서 3

nodemon --exec npm start

' v14.16.0
본.mjs 사:::::::::::: for for for for for for for for for :

Aviator@AW:/mnt/c/Users/Adrian/Desktop/Programming/nodejs_ex$ node just_js.mjs
file:///mnt/c/Users/Adrian/Desktop/Programming/nodejs_ex/just_js.mjs:3
import fetch from "node-fetch";
       ^^^^^

SyntaxError: Unexpected identifier

리리 and and ★★★★★★★★★★★★★★★★★★★★★★★★★★★★」import fetch from "node-fetch";
리리 and and ★★★★★★★★★★★★★★★★★★★★★★★★★★★★」const fetch = require('node-fetch');

Aviator@AW:/mnt/c/Users/Adrian/Desktop/Programming/nodejs_ex$ node just_js.js
(node:4899) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/mnt/c/Users/Adrian/Desktop/Programming/nodejs_ex/just_js.js:3
import fetch from "node-fetch";
^^^^^^

SyntaxError: Cannot use import statement outside a module  

리리 and and ★★★★★★★★★★★★★★★★★★★★★★★★★★★★」"type": "module"패키지화 합니다.json, 그래도 오류는 계속 표시됩니다.

{
  "name": "test",
  "version": "1.0.0",
  "description": "to get fetch working",
  "main": "just_js.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "MIT"
}

나는 문제없이 악시로 전환할 수 있었다.

import axios from 'axios';<-- 파일 맨 위에 배치합니다.
§:

axios.get('https://www.w3schools.com/xml/note.xml').then(resp => {

    console.log(resp.data);
});

가져오기를 사용하려면 다음 중 하나를 수행하십시오.

  1. .js 파일의 이름을 .mjs로 변경합니다.
  2. 포장되어 있습니다.json 파일, {type:filename} 추가

이 링크의 답변에 대한 2020년 업데이트는 이 질문에 대한 답변과 왜 이런 일을 하는지 설명하는 데 도움이 된다는 것을 알게 되었습니다.

Node.js를 사용하는 경우 필요한 것과ES6 Import/export

발췌문은 다음과 같습니다.

"업데이트 2020

Node v12 이후 ES 모듈 지원은 기본적으로 활성화되어 있지만 이 기능을 쓰는 시점에서는 아직 시험 단계입니다.노드 모듈을 포함한 파일은 .mjs 또는 가장 가까운 패키지로 끝나야 합니다.json 파일에는 "type": "type"을 포함해야 합니다.노드 문서에는 CommonJs와 ES 모듈 간의 상호 운용에 대한 많은 정보가 기재되어 있습니다."

저 같은 경우에는.는 ''에 것 요.node실행 가능. node target.ts

로 교체했는데 놀랍게도 작동했어요!

표준 실행 파일(러너)을 사용하는 방법:

node target.ts

노드 에몬 실행 파일(러너)을 사용하는 방법:

nodemon target.ts

과 함께 설치하는 .npm install nodemon;P

주의: 이것은 개발에 있어서 놀라운 효과가 있습니다.그러나 런타임에 대해 실행할 수 있습니다.node된 「」를 해 .jsfilength !!

이 오류는 명령어를 실행해도 발생합니다.

node filename.ts

가 아니라

node filename.js

말하면, '우리'는 '우리'와 ,nodets-node와 같은 패키지를 사용하지 않는 한 TypeScript 파일이 아닌 JavaScript 파일(filename.js)을 실행해야 합니다.

만약 당신이 BABEL을 사용하고 싶다면, 그것에 대한 간단한 해결책이 있습니다!

이것은 nodej의 예에 대한 것입니다.express와 같이JS 서버!

리액트나 다른 프레임워크를 사용하는 경우는, babel 메뉴얼을 참조해 주세요.

먼저 설치합니다(프로젝트만 낭비하는 불필요한 것은 설치하지 마십시오).

npm install --save-dev @babel/core @babel/node

단 2 WAO

그러면 리포트에서 babel 파일을 구성합니다!

express 서버 노드 js 및 babel 예제

파일 이름:

babel.config.json

{
    "presets": ["@babel/preset-env"]
}


babel 파일을 사용하지 않으려면 다음을 사용합니다.

콘솔에서 실행하며 script.js가 시작점입니다.

npx babel-node --presets @babel/preset-env -- script.js

파일 없는 예제 babel

자세한 내용은 이쪽.https://babeljs.io/docs/en/babel-node

패키지에 포함되어 있습니다.json 쓰기 { "type": "type" }

그것은 나의 문제를 해결했다, 나는 같은 문제를 가지고 있었다.

이행 실행 중 이 문제가 발생하였습니다.

es5와 es6의 문제

내가 해결한 방법은 이렇다.

나는 달린다

npm install @babel/register

추가하다

require("@babel/register")

.timeizer 파일 맨 위에 있는

이행의 속편을 실행해 주세요.이것은 속편 이외의 다른 것에 적용할 수 있다.

babel은 전사를 한다.

더하면 돼요.--presets '@babel/preset-env'.

예를들면,

babel-node --trace-deprecation --presets '@babel/preset-env' ./yourscript.js

또는

babel.config.js

module.exports = {
  presets: ['@babel/preset-env'],
};

Import가 동작하도록 하고 Node.js에서 모듈이 동작하지 않는 등의 다른 문제를 피하기 위해서는 다음 사항에 주의해 주십시오.

ES6 모듈에서는 아직 디렉토리를 Import할 수 없습니다.Import는 다음과 같습니다.

import fs from './../node_modules/file-system/file-system.js'

수동으로 업그레이드한 후 NX 작업 공간에서 이 오류가 발생했습니다.각각의 변경은 다음과 같습니다.jest.config.js수정:

transform: {
  '^.+\\.(ts|js|html)$': 'jest-preset-angular',
},

로.

transform: {
  '^.+\\.(ts|mjs|js|html)$': 'jest-preset-angular',
},

ES6 JS 가져오기를 사용하는 경우:

  1. 설치하다cross-env
  2. package.json바꾸다"test": "jest"로."test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest"
  3. 더 많은package.json, 다음과 같이 추가합니다.
    ...,
    "jest": {
        "transform": {}
    },
    "type": "module"

설명: cross-env를 사용하면 npm 명령어를 변경하지 않고 다음 패키지로 환경변수를 변경할 수 있습니다.json npm 명령어를 변경하여 장난에 대한 실험적인 ES6 지원을 활성화하고 이를 실행하도록 jpm을 설정합니다.

이 솔루션은 다음과 같이 노드 실행 중에 babel-node 경로를 포함하는 것이었습니다.

nodemon node_modules/.bin/babel-node index.js

패키지를 추가할 수 있습니다.json 스크립트:

debug: nodemon node_modules/.bin/babel-node index.js

메모: 제 엔트리 파일은 index.js 입니다. 파일을 엔트리 파일로 바꿉니다(많은 파일에는 app.js/server.js가 있습니다.

  1. 나도 바벨을 사용하기 시작했을 때 같은 문제가 있었어...하지만 나중에 해결책이 생겼어요난 이제까지 그 문제를 겪지금은...현재 Node.js v12.14.1, "@babel/node": "^7.8.4"에서 실행하는데 babel-node와 nodeemon을 사용합니다(Node.js도 문제 없습니다).
  2. 패키지.json: "start": "babel-node server.exec babel-node server.debug": "babel-node debug server.debug"!주의: server.js는 제 엔트리 파일입니다.사용자는 자신의 엔트리 파일을 사용할 수 있습니다.
  3. launch.json을 클릭합니다.디버깅을 할 때는 launch.json 파일 "runtime"도 설정해야 합니다.실행 파일": "${workspaceRoot}/node_modules/.bin/babel-node"!!주의: 런타임에 추가Configuration에 실행 가능.
  4. 물론 babel-node에서는 보통 babel.config.js/.babelrc 파일 등의 다른 파일도 필요합니다.

Node.js 버전12에서 nodeemon을 실행하고 있는 경우 이 명령을 사용합니다.

server.display는 내부 "메인"입니다.package.json파일을 패키지의 관련 파일로 바꿉니다.json 파일:

nodemon --experimental-modules server.js

최근에 문제가 생겼어요.이 수정은 플러그 인 섹션의 babel.config.json 파일에 추가했습니다.

["@babel/plugin-transform-modules-commonjs", {
    "allowTopLevelThis": true,
    "loose": true,
    "lazy": true
  }],

//와 함께 가져온 모듈이 있고 "cannot use use outside a module" 오류가 발생했습니다.

노드를 사용하고 있는 경우는, 이 문서를 참조해 주세요.노드 앱에서 babel을 설정하기만 하면 됩니다.그것은 나에게도 효과가 있었습니다.

npm install --save-dev @babel/cli @babel/core @babel/preset-env

추가 후에도 Netlify 함수에 오류가 발생하여 이 스레드에 오는 사용자용"type": "module"포장되어 있습니다.json 파일 업데이트netlify.toml'esbuild'를 사용합니다.esbuild는 ES6를 지원하므로 동작합니다.

[functions]
  node_bundler = "esbuild"

참고 자료: https://docs.netlify.com/functions/build-with-javascript/ #dependency-bundling

행행 migize izeize izeize whenize npx sequelize db:migrate에 이에 은 . 줄인 .sequelizerc 파일을 이었습니다.require('@babel/register');다음 이미지에서 알 수 있듯이

babel과 babel register를 설치해야 합니다.

저는 NodeJS가 처음이라 AWS Lambda 함수(Node 사용)에서도 같은 문제가 발생하였습니다.JS) 수정 중

common-js와 ES6 javascript의 차이점을 발견했습니다.

ES6:

  • 패키지에 "type":"module"을 추가합니다.json 파일

  • lib에서 사용하려면 "import"를 사용합니다.

    : jwt-decode에서 jwt_decode 가져오기

  • 람다 핸들러 메서드 코드는 다음과 같이 정의해야 합니다.

    "198.disc = 비동기(이벤트) => { }"

common-param:

  • 패키지에 "type":"module"을 추가하지 마십시오.json 파일

  • lib에서 사용하려면 "require"를 사용합니다.

    : const jwt_module = required "t-module";

  • 람다 핸들러 메서드 코드는 다음과 같이 정의해야 합니다.

    "export const 핸들러 = 비동기(이벤트) => { }"

저는 아직 막 시작한 Express API 프로젝트에서 이 문제를 겪었습니다.

의 .src/server/server.js:

import express from 'express';
import {initialDonationItems, initialExpenditureItems} from "./DemoData";

const server = express();

server.get('/api/expenditures', (req, res) => {
  res.type('json');
  res.send(initialExpenditureItems);
});

server.get('/api/donations', (req, res) => {
  res.type('json');
  res.send(initialDonationItems);
});

server.listen(4242, () => console.log('Server is running...'));

나의 의존관계는 다음과 같습니다.

{
  "name": "contributor-api",
  "version": "0.0.1",
  "description": "A Node backend to provide storage services",
  "scripts": {
    "dev-server": "nodemon --exec babel-node src/server/server.js --ignore dist/",
    "test": "jest tests"
  },
  "license": "ISC",
  "dependencies": {
    "@babel/core": "^7.9.6",
    "@babel/node": "^7.8.7",
    "babel-loader": "^8.1.0",
    "express": "^4.17.1",
    "mysql2": "^2.1.0",
    "sequelize": "^5.21.7",
    "sequelize-cli": "^5.5.1"
  },
  "devDependencies": {
    "jest": "^25.5.4",
    "nodemon": "^2.0.3"
  }
}

그리고 여기 오류를 던진 주자가 있습니다.

nodemon --exec babel-node src/server/server.js --ignore dist

비슷한 Express 프로젝트가 잘 진행되었기 때문에 답답했습니다.

해결책은 우선 이 의존관계를 추가하는 것이었습니다.

npm install @babel/preset-env

나서 그, 이, 이를 .babel.config.js다음 중 하나:

module.exports = {
  presets: ['@babel/preset-env'],
};

왜 이것이 효과가 있는지 충분히 이해할 수 없지만, 나는 그것을 권위 있는 출처에서 베꼈기 때문에 나는 그것을 계속 할 수 있어 기쁘다.

언급URL : https://stackoverflow.com/questions/58384179/syntaxerror-cannot-use-import-statement-outside-a-module

반응형