Я недавно начал работать над нетривиальным проектом в CoffeeScript, и я борюсь с тем, как лучше всего справиться с регистрацией экспорта и т. Д. Я пишу его очень «питонски», при этом отдельные файлы эффективно«модули» связанных классов и функций.То, что я ищу, это лучший способ определить классы и функции локально И в exports
/ window
с как можно меньшим количеством повторений.
В настоящее время я использую следующее в каждомфайл, чтобы сохранить запись exports.X = X
для всего в файле:
class module
# All classes/functions to be included in exports should be defined with `@`
# E.g.
class @DatClass
exports[name] = item for own name, item of module
Я также рассмотрел возможность использования функции (скажем, publish
), которая помещает переданный класс в exports
/ window
в зависимости от его имени:
publish = (f) ->
throw new Error 'publish only works with named functions' unless f.name?
((exports ? window).namespace ?= {})[f.name] = f
publish class A
# A is now available in the local scope and in `exports.namespace`
# or `window.namespace`
Это, однако, не работает с функциями, так как, насколько я знаю, их нельзя «назвать» в CoffeeScript (например, f.name
всегда ''
) и поэтому publish
не может определить правильное имя.
Существует ли какой-либо метод, который работает как publish
, но работает с функциями?Или какие-нибудь альтернативные способы справиться с этим?