Пряжа / Узел - JavaScript - Проблемы с импортом и экспортом - PullRequest
0 голосов
/ 31 марта 2020

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

SyntaxError: Невозможно использовать оператор импорта вне модуля

I Я не использую файл html. Я использую только js файлов с веб-пакетом, который возвращает результат на консоли с yarn start

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

export function assert(value, desc) {
  return value ? console.log(desc) : console.log('fail')
}

Вот код файла, в который я хочу импортировать функцию:

import {assert} from './assert.js'

function juggle() {
  var result = 0;
  for(var n=0; n < arguments.length; n++) {
    result += arguments[n]
  }

  this.result = result
}

var ninja1 = {}
var ninja2 = {}

juggle.apply(ninja1, [1,2,3,4])
juggle.call(ninja2, 5,6,7,8)

assert(ninja1.result === 10, "juggled via apply")
assert(ninja2.result === 26, "juggled via call")

Вот мой package.json:

Я не знаю, будет ли это полезно для решения этой проблемы, но вот, если вы хотите ее увидеть.

 {
  "name": "c",
  "version": "1.0.0",
  "main": "",
  "scripts": {   
    "start": "node Cap_03/01_apply_e_call.js",
    "test": "echo \"Error: no test specified\" && exit 1"   
     },
  "author": "",  
  "license": "ISC",
  "dependencies": {
    "webpack-dev-server": "^3.9.0"
  },
  "type": "module",  
  "devDependencies": {
    "webpack": "^4.41.2"
  },
  "description": ""
}

1 Ответ

0 голосов
/ 31 марта 2020

По состоянию на узле 13.2.0 +

Убедитесь, что установлена ​​последняя версия узла. Просто выполните одно из следующих действий:

  • Добавьте «type»: «module» к ближайшему родительскому пакету. json. При этом все файлы. js и .m js интерпретируются как модули ES. Вы можете интерпретировать отдельные файлы как Общие JS, используя расширение. cjs.

ИЛИ

  • Явно присваивайте имена файлам .m js расширение. Все остальные файлы, такие как. js, будут интерпретироваться как Общие JS, что является значением по умолчанию, если тип не определен в пакете. json.

Если вы используете более старая версия узла или должна

операторы импорта разрешены только в модулях ES.
Информацию о похожих функциях в Common JS см. в разделе import ().

Чтобы Node рассматривал ваш файл как модуль ES , вам нужно

  • добавить «type»: «module» в пакет. json
  • добавить флаг "--experimental-modules" к вызову узла
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...