Как я могу использовать импорт es6 в узле?

Я пытаюсь получить зависание импорта es6 в узле и пытаюсь использовать синтаксис, приведенный в этом примере:

Ссылка на cheatsheet: https://hackernoon.com/import-export-default-require-commandjs-javascript-nodejs-es6-vs-cheatsheet-different-tutorial-example-5a321738b50f

Я просматриваю таблицу поддержки: http://node.green/ , но не смог найти, какая версия поддерживает новые операторы импорта (я попытался найти импорт текста / требует). В настоящее время я запускаю узел 8.1. 2, а также считают, что, поскольку чит-лист относится к файлам .js, он должен работать с файлами .js.

Когда я запускаю код (взятый из первого примера cheatsheet):

import { square, diag } from 'lib'; 

Я получаю сообщение об ошибке: SyntaxError: Неожиданный импорт токена.

Ссылка на lib, которую я пытаюсь импортировать:

 //------ lib.js ------ export const sqrt = Math.sqrt; export function square(x) { return x * x; } export function diag(x, y) { return sqrt(square(x) + square(y)); } 

Что мне не хватает, и как я могу получить узел для распознавания моего оператора импорта?

Node.js включил экспериментальную поддержку поддержки ES6. Подробнее читайте здесь: https://nodejs.org/api/esm.html .

TLDR; Сохраните файл с модулями .mjs расширением .mjs и запустите его, как:

 node --experimental-modules my-app.mjs 

Node.js не поддерживает модули ES6. Этот блог Джеймса описывает причины этого. Хотя вы можете использовать Babel для использования синтаксиса модhive ES6.

Отработано около 3 часов.

Я просто хотел использовать import и export в js-файлах.

Все говорят, что это невозможно. Но, по состоянию на май 2018 года, можно использовать выше в plain node.js, без каких-либо модhive, таких как babel и т. Д.

Вот простой способ сделать это.

Создайте ниже файлы, запустите и посмотрите вывод для себя.

Также не забудьте увидеть Explanation ниже.

myfile.mjs

 function myFunc() { console.log("Hello from myFunc") } export default myFunc; 

index.mjs

 import myFunc from "./myfile" myFunc(); 

бег

 node --experimental-modules index.mjs 

вывод

 (node:12020) ExperimentalWarning: The ESM module loader is experimental. Hello from myFunc 

Объяснение:

  1. Поскольку это экспериментальные модули, файлы .js называются .mjs-файлами
  2. Во время работы вы добавите «-experimental-modules» в «node index.js»,
  3. При работе с экспериментальными модулями на выходе вы увидите: «(node: 12020) ExperimentalWarning: загрузчик модуля ESM является экспериментальным».
  4. У меня есть текущая версия узла js, поэтому, если я запустил «node -version», он дает мне «v10.3.0», хотя версия LTE / stable / recommended – 8.11.2 LTS.
  5. Когда-нибудь в будущем вы можете использовать .js вместо .mjs, так как функции вы становитесь стабильными, а не Experimental.
  6. Подробнее об экспериментальных функциях см .: https://nodejs.org/api/esm.html.

Надеюсь, что это помогло.

Если вы используете систему модhive на стороне сервера, вам не нужно вообще использовать Babel. Чтобы использовать модули в NodeJS, убедитесь, что:

  1. Используйте версию узла, которая поддерживает флаг -experimental-modules
  2. Затем ваши .js- файлы должны быть переименованы в .mjs

Вот и все.

Тем не менее, но это большой результат, в то время как ваш shinny чистый ES6-код будет работать в среде, такой как NodeJS (при написании 9.5.0), у вас все еще будет сумасшествие транспиляции только для тестирования. Также имейте в виду, что Ecma заявила, что циклы выпуска для Javascript будут быстрее, а новые функции будут предоставляться на регулярной основе. Хотя это не будет проблемой для отдельных сред, таких как NodeJS, это несколько другое предложение для среды браузера. Понятно, что в рамках тестирования очень много предстоит сделать. Вам все равно нужно будет перераспределить для тестирования фреймворки. Я предлагаю использовать шутку.

Также имейте в виду структуру пакетов, вы столкнетесь с проблемами там

Вернуться к первоначальному вопросу Jonathan002 о

«… какая версия поддерживает новые инструкции импорта ES6?»

основанный на статье доктора Акселя Раушмайера , есть план по его поддержке по умолчанию (без экспериментального флага командной строки) в Node.js 10.x LTS . Согласно плану выпуска node.js, так как он находится на 3/29, 2018, он, скорее всего, станет доступен после апреля 2018 года, а LTS – с октября 2018 года.

Вы можете попробовать.

Вот несколько примеров: https://www.npmjs.com/package/esm

решение

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

ниже приведено описание mixins / index.js

 export { default as FormValidationMixin } from './form-validation'; // eslint-disable-line import/prefer-default-export 

который отлично работал в моем приложении node.js CLI.

  • В чем разница между зависимостями, devDependencies и peerDependencies в файле npm package.json?
  • E11000 дублирует ключевой индекс ошибки в mongodb mongoose
  • nodejs connect не может найти статический
  • Использовать переменную в Jade include
  • Как переопределить вложенные версии зависимостей NPM?
  • Что такое опция -save для установки npm?
  • Есть ли способ автоматически создать файл package.json для проектов Node.js
  • Разрешить запрос CORS REST в приложение Express / Node.js на Heroku
  • Загрузка файлов с помощью Express 4.0: req.files undefined
  • Первое развертывание Heroku не выполнено «код ошибки = H10»
  • Валовый неожиданный импорт токена при выполнении мокко-тестов
  • Interesting Posts
    Давайте будем гением компьютера.