Почему-то я не мог задать вопрос, не получив ошибки, связанной с неправильной разметкой кода, поэтому я переместил большую часть его на GitHub здесь: https://github.com/JoepBC/typescript-packages-example-error
Проблема сводится к следующему: используя структуру пакета, как на GitHub (с использованием TypeScript, webpack и ts-loader), у меня есть два пакета, LibA и LibB, где LibB хочет загружать объекты из скомпилированного кода LibA TS-> JS ( Файлы определения .d.ts для LibA создаются нормально).
Код для ~ / A / src / index.ts выглядит следующим образом:
import {TestExport} from './test_export.ts';
export class Foo extends TestExport {
constructor(text:string) {
super(text);
console.info("added by the extended class");
}
}
let a = new Foo('bar');
Код для ~ / A / src / test_export.ts:
export class TestExport {
constructor(text:string) {
console.info("TestExport constructor argument:"+text);
}
}
Источник для ~ / B / src / index.ts:
import * as LibA from 'liba';
console.info('----');
let a = new LibA.Foo('arg1');
Сгенерированный код javascript для Lib A работает должным образом. Lib B пытается импортировать из A (поскольку A импортирует из другого файла [хотя и не скомпилированный] в пределах тех же пакетов), а код javascript из A может быть запущен в B, но в BI не может инициировать новый объект из класса из А.
Результат при запуске B:
~/B/dist $ node index.js
TestExport constructor argument:bar
added by the extended class
----
webpack:///./src/index.ts?:5
var a = new LibA.Foo('arg1');
^
TypeError: LibA.Foo is not a constructor
at eval (webpack:///./src/index.ts?:5:9
at Object../src/index.ts (~/B/dist/index.js:108:1)
at __webpack_require__ (~/B/dist/index.js:20:30)
at ~/B/dist/index.js:84:18
at Object. (~/B/dist/index.js:87:10)
at Module._compile (module.js:641:30)
at Object.Module._extensions..js (module.js:652:10)
at Module.load (module.js:560:32)
at tryModuleLoad (module.js:503:12)
at Function.Module._load (module.js:495:3)
Различные способы запроса / импорта A внутри B, похоже, тоже не работают ... Как это сделать? Заранее спасибо.
Спасибо за ответ, Мэтт. Импорт сгенерированного javascript действительно работает, и статический код выполняется нормально. Вызов функций или использование классов из A кажется проблематичным. Когда компилятор TypeScript вызывается без использования webpack и выполняется исходный код javascript, возникает та же проблема.
примеры кода машинописного и javascript и вывода обновляются в github.com/JoepBC/typescript-packages-example-error/blob/master /…
Когда код .ts для liba и libb компилируется в .js вручную, без использования npm или webpack, он работает должным образом: github.com/JoepBC/typescript-packages-example-error/tree/mas ter /…. Итак, где-то в процессе webpack препятствует "нормальному" импорту liba внутрь libb.
По сути, проблема в том, что пакет Webpack предназначен для разрешения внутренних ссылок между включенными модулями, но ничего не экспортирует. Статический код будет работать, но вы не сможете получить доступ к функциям или классам. Вам нужно будет использовать другой подход; см. ветку, на которую я ссылался выше, для альтернатив.
Я почти уверен, что это можно сделать с правильными параметрами конфигурации (но я не могу понять, какие из них, это такой обширный непонятный беспорядок, над которым нужно работать). Теперь я решил использовать компилятор tsc для компиляции библиотек (liba в примере) и webpack (с ts-loader и typescript) для компиляции окончательного приложения с машинописным текстом, которое будет использоваться из браузера. Это работает, но это обходной путь. Спасибо, что подумали вместе со мной.





Похоже, что импорт одного пакета Webpack непосредственно в другой проект Webpack не работает, но есть несколько вариантов. См. эта ветка.