Использование скрипта в качестве модуля ES6 приводит к предупреждению no-undef - PullRequest
2 голосов
/ 02 апреля 2019

Я создал скрипт для генерации некоторых вымышленных учетных записей и транзакций, и сам по себе он работает.Он генерирует 2 списка, как я ожидаю, однако мне нужно использовать списки в другом файле.Когда я экспортирую переменные в конце и повторно импортирую их в другой файл, я получаю кучу предупреждений без ошибок, и моя сборка заканчивается неудачей.

Я предполагаю, что это потому, что мои объекты экспорта содержат функции.Как я могу заставить функции просто генерировать значения, чтобы я мог правильно их экспортировать?

randomint = (start, end) => {
  let diff = end - start;
  return Math.floor(Math.random() * diff) + start
}

chance = (rate=0.5) => {
  return Math.random() > rate ? true : false;
}

pad = (n, width, z) => {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

NUM_OF_ACCOUNTS = 10
NUM_OF_TXS = randomint(30, 40)

let accounts = [];
let transactions = [];


for (let i=0; i< NUM_OF_ACCOUNTS; i++) {
  accounts.push({
    id: i,
    ref: `SMAR_A${pad(i, 3)}`,
    account: randomint(10000000, 99999999),
    sortcode: randomint(100000, 9999999),
    fraud: chance(0.1),
    balance: Math.round(Math.random() * 85000, 2)
  })
}

for (let t = 0; t < NUM_OF_TXS; t++) {
  // Lookup a random account number to generate a transaction for
  acct_num = randomint(0, accounts.length - 1 )

  transactions.push({
    ref: accounts[acct_num].ref,
    deposit: Math.round(Math.random() * 85000, 2),
    account: accounts[acct_num].account,
    sortcode: accounts[acct_num].sortcode,
  })
};

export accounts;
export transactions;

Я пробовал диапазон экспорта и импорта, и мне не повезло.

  Line 1:    'randomint' is not defined        no-undef
  Line 6:    'chance' is not defined           no-undef
  Line 10:   'pad' is not defined              no-undef
  Line 16:   'NUM_OF_ACCOUNTS' is not defined  no-undef
  Line 17:   'NUM_OF_TXS' is not defined       no-undef
  Line 17:  'randomint' is not defined        no-undef
  Line 23:  'NUM_OF_ACCOUNTS' is not defined  no-undef
  Line 26:  'pad' is not defined              no-undef
  Line 27:  'randomint' is not defined        no-undef
  Line 28:  'randomint' is not defined        no-undef
  Line 29:  'chance' is not defined           no-undef
  Line 34:  'NUM_OF_TXS' is not defined       no-undef
  Line 35:   'acct_num' is not defined         no-undef
  Line 35:  'randomint' is not defined        no-undef
  Line 38:  'acct_num' is not defined         no-undef
  Line 40:  'acct_num' is not defined         no-undef
  Line 41:  'acct_num' is not defined         no-undef

Что я делаю не так и как я могу улучшить работу моего экспорта?Я хотел бы понять свои ошибки и ошибки, чтобы я мог больше учиться и совершенствоваться.

Ответы [ 2 ]

3 голосов
/ 02 апреля 2019

Поведение происходит из строгого режима JavaScript.Ваш код работает в «неаккуратном режиме».В частности, вы сталкиваетесь с этим правилом (взято из документации Mozilla строгого режима):

Строгий режим делает невозможным случайное создание глобальных переменных.В обычном JavaScript неправильный ввод переменной в присваивании создает новое свойство для глобального объекта и продолжает «работать» (хотя в будущем возможен сбой: вероятно, в современном JavaScript).Присвоения, которые случайно создали бы глобальные переменные, вместо этого выдают ошибку в строгом режиме:

В вашем коде это происходит здесь:

randomint = (start, end) => {
  let diff = end - start;
  return Math.floor(Math.random() * diff) + start
}

И все остальные места, которые вводитпеременная без использования const, let или var.

Это простое исправление, просто добавьте const или let перед каждой переменной:

const randomint = (start, end) => {
  let diff = end - start;
  return Math.floor(Math.random() * diff) + start
}

const chance = (rate=0.5) => {
  return Math.random() > rate ? true : false;
}
// etc

Вы сталкиваетесь с этим только с модулями, так как для модулей строгий режим включен по умолчанию, а обычные сценарии - нет.

1 голос
/ 02 апреля 2019

Тогда просто объявите их. Вместо

randomint = (start, end) => {

запись

const randomint = (start, end) => {

1007 * Etc. *

...