복붙노트

[NODEJS] 어떻게 노드에 ES6 가져 오기를 사용할 수 있습니까? [복제]

NODEJS

어떻게 노드에 ES6 가져 오기를 사용할 수 있습니까? [복제]

해결법


  1. 1.TLDR;

    TLDR;

    때문에> = v13

    그것은 노드 (13)와 위의 아주 간단합니다. 당신도 할 필요가 :

    당신은 ES 모듈을 사용할 수 있도록 위의 중 하나를 수행해야합니다.

    때문에 <= v12

    당신이 노드 버전 8-12를 사용하는 경우, 저장 .mjs 확장자 ES6 모듈과 파일을 같이 실행합니다 :

    node --experimental-modules my-app.mjs
    

  2. 2.당신은 또한 당신이 노드에 ES6 모듈을 사용할 수 있습니다 ESM라는 NPM 패키지를 사용할 수 있습니다. 그것은 어떤 구성이 필요하지 않습니다. ESM하면 JS 파일에 내보내기 / 가져 오기를 사용할 수 있습니다.

    당신은 또한 당신이 노드에 ES6 모듈을 사용할 수 있습니다 ESM라는 NPM 패키지를 사용할 수 있습니다. 그것은 어떤 구성이 필요하지 않습니다. 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. 3.3시간에 대해 낭비.

    3시간에 대해 낭비.

    난 그냥 JS 파일의 가져 오기 및 내보내기를 사용하고 싶었다.

    모두가 불가능했다. 그러나 월 2018, 그것은 등 바벨과 같은 어떤 모듈을하지 않고, 일반 Node.js를 위에서 사용 가능

    여기에 그것을 할 수있는 간단한 방법입니다.

    파일 아래 만들고 실행하고 자신을 위해 출력을 참조하십시오.

    또한 아래의 설명을 참조하는 것을 잊지 마세요.

    function myFunc() {
        console.log("Hello from myFunc")
    }
    
    export default myFunc;
    
    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
    

    설명:

    도움이되기를 바랍니다.

     


  4. 4.이 같은 모든 표준 모듈을 가져올 노드 v12.2.0를 사용하여 다음을 수행 할 수 있습니다

    이 같은 모든 표준 모듈을 가져올 노드 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')
    

    ECMA 스크립트 모듈이 오래가 package.json 파일에이 필드가로 같은 .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')
    

    물론,이 실제로 모듈 수입 (v13.2 이후에 필요하지 않은)을 사용하여 스크립트를 실행하는 데 필요한 것을 잊지 마세요 :

    node --experimental-modules my-script-that-use-import.js
    

    그리고 상위 폴더는 해당 스크립트 가져 오기 구문에 대해 불평하는이 package.json 파일을 필요로 :

    {
      "type": "module"
    }
    

    사용하려는 모듈 가져 오기 구문을 사용하여 가져올 지원하도록 업데이트되지 않은 경우에 당신이 필요로 사용하는 것보다 다른 선택의 여지가 없다 (하지만 위의 내 솔루션은 문제가되지 않습니다와 함께).

    또한 모듈에서 누락 된 __filename 및 __dirname 상수를 구현하는 코드의 조각을 공유 할 :

    import {fileURLToPath} from 'url'
    import {dirname} from 'path'
    const __filename = fileURLToPath(import.meta.url)
    const __dirname = dirname(__filename)
    

  5. 5.서버 측의 모듈 시스템을 사용하는 경우, 당신은 전혀 바벨을 사용할 필요가 없습니다. NodeJS에서 모듈을 사용하려면 다음을 확인하십시오

    서버 측의 모듈 시스템을 사용하는 경우, 당신은 전혀 바벨을 사용할 필요가 없습니다. NodeJS에서 모듈을 사용하려면 다음을 확인하십시오


  6. 6.

      "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')
    

    Node.js를 https://timonweb.com/posts/how-to-enable-es6-imports-in-nodejs/에 ES6 수입을 사용하는 방법 링크


  7. 7.당신은 ESM을 시도 할 수 있습니다.

    당신은 ESM을 시도 할 수 있습니다.

    다음은 몇 가지 소개입니다 : https://www.npmjs.com/package/esm


  8. 8.대한 Jonathan002의 원래의 질문으로 돌아 가기

    대한 Jonathan002의 원래의 질문으로 돌아 가기

    박사 악셀 Rauschmayer에 의해 기사를 기반으로, Node.js를 10.x에서 LTS에서 (실험 명령 줄 플래그없이)는 기본적으로 지원이 계획이있다. 그것의 LTS 10 월 2018에 시작됩니다하면서 29분의 3, 2018에 그대로 Node.js를 출시 계획에 따르면, 4 월 2018 이후에 사용할 수있게 될 가능성이 높습니다.


  9. 9.해결책

    해결책

    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');
    
    export { default as FormValidationMixin } from './form-validation'; // eslint-disable-line import/prefer-default-export
    

    그건 내 Node.js를 CLI 응용 프로그램 내에서 잘 작동했다.


  10. 10.위해 (로 허용 대답에 제안)을 .mjs 확장을 사용하지만, ECMAScript를 모듈의 작동을 가능하게 Node.js를의 V12과 함께, 당신은 또한 당신의 package.json에 전 세계적으로이 기능을 활성화 할 수 있습니다.

    위해 (로 허용 대답에 제안)을 .mjs 확장을 사용하지만, ECMAScript를 모듈의 작동을 가능하게 Node.js를의 V12과 함께, 당신은 또한 당신의 package.json에 전 세계적으로이 기능을 활성화 할 수 있습니다.

    공식 문서는 상태 :

    {
      "type": "module",
      "main": "./src/index.js"
    }
    

    (물론 당신은 여전히 ​​당신의 응용 프로그램을 시작할 때 플래그를 --experimental-모듈을 제공해야합니다).


  11. 11.나는이 사건에 대한 작동하지만이 가진 Express 서버를 실행하고 있는지 알고하지 않습니다

    나는이 사건에 대한 작동하지만이 가진 Express 서버를 실행하고 있는지 알고하지 않습니다

    nodemon --inspect ./index.js --exec babel-node --presets es2015,stage-2
    

    이것은 나에게 난 단지 노드 버전 8을 사용하고 있습니다 비록 수입 및 사용 확산 조작 할 수있는 기능을 제공합니다.

    당신은 내가 뭘 어떻게해야합니까 바벨 - CLI, 바벨 - 사전 - es2015, 바벨 - 사전 단계-2를 설치해야합니다.

  12. from https://stackoverflow.com/questions/45854169/how-can-i-use-an-es6-import-in-node by cc-by-sa and MIT license