Как я могу использовать импорт es6 в узле?
Я пытаюсь получить зависание импорта es6 в узле и пытаюсь использовать синтаксис, предоставленный в этом примере:
Ссылка На Cheatsheet: https://hackernoon.com/import-export-default-require-commandjs-javascript-nodejs-es6-vs-cheatsheet-different-tutorial-example-5a321738b50f
Я просматриваю таблицу поддержки:http://node.зеленый/, но не смог найти, какая версия поддерживает новые операторы импорта (я пробовал искать text 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));
}
что мне не хватает и как я могу заставить узел распознать мой оператор импорта?
7 ответов
узел.js включил экспериментальную поддержку поддержки ES6. Подробнее здесь:https://nodejs.org/api/esm.html.
TLDR; сохраните файл с модулями ES6 с помощью .mjs
расширение и запустите его как:
node --experimental-modules my-app.mjs
узел.js не поддерживает модули ES6. этот блог Джеймса описывает причины этого.
Хотя вы можете использовать Бабель использовать синтаксис модулей ES6.
потратил около 3 часов.
Я просто хотел использовать import
и export
в файлах js.
все говорят, что это невозможно. Но, по состоянию на май 2018 года, можно использовать выше в обычном узле.js, без каких-либо модулей, таких как babel и т. д.
вот простой способ сделать это.
создайте файлы ниже, запустите и посмотрите вывод самостоятельно.
также не забудьте посмотреть Explanation
под.
myfile.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
объяснение:
- так как это экспериментальные модули .имена файлов js .файлы mjs
- во время работы вы добавите "--experimental-modules" в "индекс узла.js"
- во время работы с экспериментальными модулями на выходе вы увидите: "(узел: 12020) ExperimentalWarning: The Загрузчик модуля ESM является экспериментальным. "
- у меня есть текущий выпуск узла js, поэтому, если я запускаю "node -- version", он дает мне " v10.3.0", хотя LTE/стабильная / рекомендуемая версия-8.11.2 LTS.
- когда-нибудь в будущем вы можете использовать .вместо JS на .mjs, как функции вы становитесь стабильными, а не экспериментальными.
- подробнее об экспериментальных функциях см.:https://nodejs.org/api/esm.html
надеюсь, что помогла.
Если вы используете систему модулей на стороне сервера, вам не нужно использовать Babel вообще. Чтобы использовать модули в NodeJS, убедитесь, что:
- используйте версию node, которая поддерживает --experimental-modules флаг
- код .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
это отлично работало внутри моего узла.приложение JS CLI.
Я не знаю, будет ли это работать для вашего случая, но я запускаю экспресс-сервер с этим:
nodemon --inspect ./index.js --exec babel-node --presets es2015,stage-2
Это дает мне возможность импортировать и использовать оператор распространения, хотя я использую только версию узла 8.
вам нужно будет установить babel-cli, babel-preset-es2015, babel-preset-stage-2 Сделайте то, что я делаю.