@bubaley

Как сделать чтобы require возвращал новый объект?

Здравствуйте, есть небольшой вопрос для упрощения моей скромной жизни.
Я написал библиотеку и опубликовал ее в npm. Суть в том, что она должна возвращать болванку объекта с определенными методами и полями.
Например:
module.export = {
    name: '',
    url: '',
    routes: [],
    list: [],
    item: null,
    default: {
        name: null
    },
    loadList: () => ({
        // Тут что-то происходит
    })
}

Я в этой болванке переприсваиваю поля:
const m = require('__demo__')
m.url = "__url__"
m.method = () => {
    // Тут новый метод
}


В другом файле мне тоже необходимо получить болванку и также присвоить новые поля и методы, но возвращается объект с уже измененными полями, а хотелось бы получать пустой.

Вообще нашел решение: возвращать функцию и получать объект как const m = require('__demo__')(), но хотелось бы избавиться от этих скобочек)

Пробовал такую конструкцию, но все равно возвращается измененный объект
module.exports = (function () {
    const kek = {}
    kek.kek = 1
    return kek
}())

Как можно решить эту беду?
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Ну какбэ очевидный и тупой вариант:
Object.defineProperty(module, 'exports', {
  get() {
    return {
      name: '',
      url: '',
      routes: [],
      list: [],
      item: null,
      default: {
        name: null
      },
      loadList: () => ({
        // Тут что-то происходит
      })
    }
  }
})

С node js катит, а вот как со сборщиками всякими - хз, надо смотреть.

Ещё можно чистить кэш require перед каждым вызовом: delete require.cache[path.resolve('<module>')].
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы