Как я могу использовать импорт 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));
}
что мне не хватает и как я могу заставить узел распознать мой оператор импорта?
7 ответов:
узел.JS все-таки включена экспериментальная поддержка для поддержки ЕС6. Подробнее об этом читайте здесь:https://nodejs.org/api/esm.html.
TLDR; сохраните файл с модулями ES6 с помощью
потратил около 3 часов.
Я просто хотел использовать
importиexportв файлах js.все говорят, что это невозможно. Но, по состоянию на май 2018 года, его можно использовать выше в простом узле.js, без каких-либо модулей, таких как babel и т. д.
вот простой способ сделать это.
создать ниже файлы, запустить и посмотреть вывод для себя.
также не забудьте посмотреть
Explanationпод.мой_файл.mjs
.mjsfunction myFunc() { console.log("Hello from myFunc") } export default myFunc;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" в "индекс узла.ОАО"
- во время работы с экспериментальными модулями на выходе вы увидите: "(узел:12020) ExperimentalWarning: The Загрузчик модуля ESM является экспериментальным. "
- у меня есть текущая версия узла js, поэтому, если я запускаю "node --version", он дает мне "v10.3.0", хотя LTE/stable/рекомендуемая версия-8.11.2 LTS.
- когда-нибудь в будущем, вы могли бы использовать .js вместо .mjs, как функции, которые вы становитесь стабильными, а не экспериментальными.
- подробнее об экспериментальных функциях см.:https://nodejs.org/api/esm.html
надеюсь, что помогла.
Если вы используете систему модулей на стороне сервера, вам не нужно использовать Babel вообще. Для использования модулей в NodeJS убедитесь, что:
- используйте версию узла, который поддерживает --опытно-модули флаг
- код .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