Bundle библиотека JavaScript с пространством имен и классами в разных файлах - PullRequest
0 голосов
/ 06 октября 2018

У меня есть разные файлы с пространством имен и классами, такими как:

1) namespace.js:

var somenamespace = window.somenamespace || {};

2) class1.js:

somenamespace.class1= (function() {
  var _public = {};
  _public.someBoolean= false;
  return _public;
})();

3) class2.js:

somenamespace.class2= (function() {
  var _public = {};
  _public.init= function() {
  };
  return _public;
})();

Мне нужно связать их и выставить их в библиотеке.Примерно так:

expose default {
  somenamespace
};

, чтобы использовать его в другом проекте.Примерно так:

import * as somenamespace from 'somenamespace';

var a = function() {
    somenamespace.class1.someBoolean = true;
    ansomenamespace.class2.init();
};

Как мне это сделать?(Я хотел бы также выставить определение его типов для использования машинописи) Спасибо!

1 Ответ

0 голосов
/ 07 октября 2018

Вы смешиваете модули стиля import / export и тип, который прикреплен к window.Я бы порекомендовал выбрать один или другой.


Например, чтобы прикрепить все к window:

namespace.js

var somenamespace = window.somenamespace || {}; // not strictly necessary

class1.js

var somenamespace = window.somenamespace || {};

somenamespace.class1= (function() {
  var _public = {};
  _public.someBoolean= false;
  return _public;
})();

class2.js

var somenamespace = window.somenamespace || {};

somenamespace.class2= (function() {
  var _public = {};
  _public.init= function() {
  };
  return _public;
})();

с использованием модуля

// no import, just read it off of window

var a = function() {
    window.somenamespace.class1.someBoolean = true;
    window.ansomenamespace.class2.init();
};

В качестве альтернативы я бы порекомендовал import / export, хотя вам нужно переносить код с помощью Babel или Webpack или чего-то подобного, поскольку не все браузеры поддерживают модули ES:

namespace.js

export {class1} from './class1'
export {class2} from './class2'

class1.js

export const class1 = (function() {
  var _public = {};
  _public.someBoolean= false;
  return _public;
})();

class2.js

export const class2 = (function() {
  var _public = {};
  _public.init= function() {
  };
  return _public;
})();

с использованием модуля

import * as somenamespace from './namespace'

var a = function() {
    somenamespace.class1.someBoolean = true;
    ansomenamespace.class2.init();
};
...