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



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



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



Я просматриваю таблицу поддержки:http://node.зеленый/, но не смог найти, какая версия поддерживает новые операторы импорта (я пробовал искать текст import / require) в настоящее время я запускаю узел 8.1.2, а также считаю, что поскольку cheatsheet ссылается .JS файлы он должен работать .JS файлы.



Как я запускаю код (взятый из 1-го примера 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));
}


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

708   7  

7 ответов:

узел.JS все-таки включена экспериментальная поддержка для поддержки ЕС6. Подробнее об этом читайте здесь:https://nodejs.org/api/esm.html.

TLDR; сохраните файл с модулями ES6 с помощью

потратил около 3 часов.

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

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

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

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

также не забудьте посмотреть Explanation под.

мой_файл.mjs

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

export default myFunc;
.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" в "индекс узла.ОАО"
  3. во время работы с экспериментальными модулями на выходе вы увидите: "(узел:12020) ExperimentalWarning: The Загрузчик модуля ESM является экспериментальным. "
  4. у меня есть текущая версия узла js, поэтому, если я запускаю "node --version", он дает мне "v10.3.0", хотя LTE/stable/рекомендуемая версия-8.11.2 LTS.
  5. когда-нибудь в будущем, вы могли бы использовать .js вместо .mjs, как функции, которые вы становитесь стабильными, а не экспериментальными.
  6. подробнее об экспериментальных функциях см.:https://nodejs.org/api/esm.html

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

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

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

на Jonathan002 оригинальный вопрос о

"... какая версия поддерживает новые операторы импорта ES6?"

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

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

вот некоторые введение: 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

это работало просто отлично внутри моего узла.Яш командной строки приложения.

Я не знаю, будет ли это работать для вашего случая, но я запускаю экспресс-сервер с этим:

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

Это дает мне возможность импортировать и использовать оператор spread, хотя я использую только node версии 8.

вам нужно будет установить babel-cli, babel-preset-es2015, babel-preset-stage-2 делать то, что я делаю.

Comments

    Ничего не найдено.