Как вызвать и повторно использовать функцию из файла? - PullRequest
0 голосов
/ 21 апреля 2020

В приведенном ниже скрипте я хотел бы прочитать содержимое config.toml и отметил, где я хотел бы это сделать. Что меня смущает, так это то, как включить файл toml.js, который содержит функцию чтения toml.

На протяжении всего сценария мне нужно будет прочитать 3 разных файла toml.

Вопрос

Как включить функцию toml.js и как использовать эту функцию для чтения 3 разных файлов?

Отказ от ответственности: прошу прощения за этот вопрос о супер-нубе, но это мой первый и с 6 различными способами написания функции , я нахожу это очень запутанным.

index. js

'use strict'
var minimist = require('minimist')
const toml = require('./src/toml')

module.exports = () => {
var argv = minimist(process.argv.slice(2), {
  string: 'input',
  string: 'project',
  boolean: ['validate'],
  boolean: ['help'],
  alias: { i: 'input', v: 'validate', h: 'help', p: 'project' },
  unknown: function () { console.log('Unkown argument') }
})

  if (argv.help || argv.h) {
    // help output goes here
  }

  // read config.toml

}

срк / томл. js

module.exports = (filename) => {
  const TOML = require('@iarna/toml')
  const fs = require('fs');

  return TOML.parse(fs.readFileSync(filename, 'utf-8'));
}

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Похоже, у вас все настроено правильно. Внутри индекса. js вы можете использовать toml('filename.toml'). Эта функция возвращает содержимое файла filename.toml как объект.

src / toml. js экспортирует функцию, которая анализирует файл .toml. Когда вы используете const toml = require('./src/toml') внутри индекса. js, вы присваиваете toml для экспорта ./src/toml.js (который является функцией синтаксического анализа). Это означает, что в index. js, toml представляет функцию в ./src/toml.js.

Затем вы можете использовать toml('filename.toml') столько раз, сколько вы хотите в индексе. js.

Вот ваш индекс. js код, измененный для чтения файла config.toml и сохранения объекта в config ...

'use strict'
var minimist = require('minimist')
const toml = require('./src/toml')

module.exports = () => {
  var argv = minimist(process.argv.slice(2), {
    string: 'input',
    string: 'project',
    boolean: ['validate'],
    boolean: ['help'],
    alias: { i: 'input', v: 'validate', h: 'help', p: 'project' },
    unknown: function () { console.log('Unkown argument') }
  })

  if (argv.help || argv.h) {
    // help output goes here
  }

  // read config.toml
  const config = toml('config.toml')

}
1 голос
/ 21 апреля 2020

Вы должны быть в состоянии позвонить toml('path/to/config/that/you/want/to/read.toml')

Вам необходим модуль src / toml. js. Этот модуль экспортирует функцию - не имеет значения, как эта функция объявлена ​​в этом случае. Всякий раз, когда вы импортируете этот модуль - вам предоставляется эта функция.

Итак:

const iCanCallThisReferenceHoweverIWant = require('./src/toml');
iCanCallThisReferenceHoweverIWant('path/to/a/toml/file.toml');

Я думаю, вам нужно указать свои зависимости в toml.js вне определения функции - я предполагаю, что это может кричать вам об этом, но я не супер-уверенный в этом:)

Предложение + некоторый рефакторинг:

src / toml. js

const TOML = require('@iarna/toml')
const fs = require('fs');

const readTOML = (filename) => TOML.parse(fs.readFileSync(filename, 'utf-8'));
module.exports = readTOML;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...