Каков правильный синтаксис для этой ситуации? - PullRequest
1 голос
/ 22 мая 2019

Я запутался с JS.Я написал псевдо-реализацию стека, который сохраняется в своем собственном файле.Я хочу «создать» объект Stack в отдельном файле, однако WebStorm сообщает мне о синтаксической ошибке.См. Ошибку ниже:

import Stack from "./Stack"
       ^^^^^

SyntaxError: Unexpected identifier
    at Module._compile (internal/modules/cjs/loader.js:718:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)
    at Module.load (internal/modules/cjs/loader.js:641:32)
    at Function.Module._load (internal/modules/cjs/loader.js:556:12)
    at Function.Module.runMain (internal/modules/cjs/loader.js:837:10)
    at internal/main/run_main_module.js:17:11

Вот как я называю импорт в файле тестера, основываясь на недавних предложениях других пользователей:

// Stack.js
class Stack {
    ....
}
export default Stack

// StackTester.js driver file
import Stack from "./Stack"
    ....

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Пожалуйста, проверьте вашу версию node.js. Синтаксис import поддерживается (как экспериментальная функция ) в файле node.js 8.5.0+. Чтобы использовать эту функцию, вам необходимо:

  1. Если вы используете старую версию Node.js, вам необходимо обновить ее.

    Ваш интерпретатор node.js, используемый WebStorm, можно найти в Setting -> Language & Frameworks -> Node.js and NPM, вы можете найти версию на основе пути к каталогу (например, в моем случае это 8.12.0) или по команде, аналогичной node -v

    enter image description here

  2. Переименуйте все ваши *.js файлы в *.mjs. например Переименуйте stack.js в stack.mjs

  3. Запустите файл mjs с параметром командной строки --experimental-modules. Если вы используете командную строку, вы должны использовать что-то похожее на node --experimental-modules main.mjs. Если вы используете webstorm, вы можете настроить его через параметр командной строки webstorm (как показано на скриншоте)

    enter image description here enter image description here

Однако операторы import / export - не лучший способ для модульной разработки в node.js. Он в основном используется в интерфейсной веб-разработке с веб-пакетом. Обычно в node.js мы используем require и module.export, это должно быть что-то похожее на

// In stack.js
class Stack {

}
module.export = {Stack}

// In main.js
const {Stack} = require('./stack.js')

Кроме того, вам может потребоваться включить синтаксис ES6 в Webstorm, если он показывает предупреждение в редакторе.

Setting -> Language & Frameworks -> JavaScript, в раскрывающемся списке JavaScript Language Version выберите ECMAScript 6.

enter image description here

0 голосов
/ 22 мая 2019

В Stack.js вы экспортируете по умолчанию, т.е.:*

import Stack from './Stack".
...