У нас есть кросс-платформенное приложение на основе Polymer и Chromium.Переход с ES5 на ES2015 с пространством имен
В настоящее время все наши JavaScript-константы поддерживаются в index.html
, импортируйте их в нажав влево заказать! Этот подход скоро станет кошмаром, и писать тест и увидеть тестовое покрытие - непростая задача.
Для будущего спасения мы решили перейти на ES2015 с его модульным подходом.
Теперь нам нужно переконфигурировать наши файлы JavaScript, чтобы иметь возможность поддерживать зависимости между отдельными модулями JavaScript. Все идет нормально. Но как мы это делаем, чтобы сохранить наши пространства имен, закрытие и т. Д.?
Это пример кода:
//namespace check
var app_ns = app_ns || { };
// ****************************************************************************
// Module: app
// ****************************************************************************
app_ns.app = (function initialize() {
// ***
// basic APIs and definitions
// ***
// Application version will be replaced by Gruntfile task.
// Don't change the version manually!!!
var AW_VERSION = "1.4.32";
function version() { return AW_VERSION; }
...
// ***
// exports
// ***
return {
version : version
};
}());
Как видно из приведенного выше инициализации кода выполняется и назначен app_ns.app
. Из-за простоты фрагмент кода не отображает зависимости с другими модулями, но мы точно знаем это!
Так вопросы
- Как использовать пространство имен в ES2015
- Как автоматически выполнять закрытие
- Как экспортировать функции модулей, но не в глобальном масштабе!
export { xxx };
экспортирует все функции внутри {...}
в глобальном масштабе, не так ли? Как привязать экспортированные функции к правильному пространства имен? В этом примере до app_ns.app
просто экспортируйте существующие объекты, например 'app_ns.app', после того как они определены. – dandavis
Вы хотите, чтобы это пространство имен было внешним API? Как только вы правильно экспортируете вещи и импортируете их в другое место, я бы не ожидал, что какое-либо использование объектов пространства имен внутри вашего собственного кода. – loganfsmyth
Вы не использовали бы пространства имен в ES6, кроме API вашей библиотеки. – Bergi