Глобальное имя модуля - PullRequest
1 голос
/ 31 марта 2020


Я хотел бы знать, как добавить объявление пространства имен в мой js пакет.

У меня есть класс машинописи в myclass.ts

export class MyClass{
...
}

Я использую этот класс в других файлах

export {MyClass} from "myclass"
...
let a:MyClass = new MyClass();

Я компилирую его в код vs и использую grunt для автоматизации concat различных файлов и минимизации с помощью terser.

Все хорошо, за исключением того, что я хотел бы иметь пространство имен до мой класс, когда я использую его в js

<script src="mylib.min.js"></script>
...
var a = new MYLIB.MyClass();

Где в процессе я представляю пространство имен "MYLIB"? Я хочу продолжить работу над шаблоном экспорта / импорта, поэтому я не хочу включать пространство имен или имя модуля в файл TS.

Существует ли плагин для этого? На topi c.

я не нахожу ни четкой информации, ни образцов.

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Не нашел простого решения с помощью только Grunt, затем я перехожу к webpack и использую

output: {
    library: 'MYLIB',
    libraryTarget: 'var',
    filename: '[name].' + config.version + '.js' ,
    path: path.resolve(__dirname, 'dist'),
}

Я понимаю, что webpack и grunt не предназначены для одинакового использования, но каким-то образом мы можем используйте оба. Я также взгляну на пару webpack / gulp. Спасибо всем читателю и @ см. формирователь , что нашли время, чтобы ответить. Оставайтесь в безопасности дома.

0 голосов
/ 31 марта 2020

Ваш код смешивается javascript и машинопись. Вы строите уменьшенный файл javascript из машинописного текста, а затем пишете javascript (var a = new MYLIB.MyClass();). Это озадачивает меня, так как обычно вы пишете весь свой код в одном или другом. Тем не менее, javascript не имеет никакого понятия пространства имен, поэтому new MYLIB.MyClass() недопустимо. С другой стороны, пространства имен существуют в машинописном тексте, поэтому, если вы используете класс в контексте машинописного текста, вы можете использовать этот синтаксис: https://www.typescriptlang.org/docs/handbook/namespaces.html

Также см. этот ответ для получения информации о том, как вы можете отчасти подделать пространства имен в чистом javascript. По сути, «пространство имен» в javascript - это просто объект, подобный любому другому, поэтому new namespace.myClass() не работает; Вы не можете поместить определение класса в объект.

...