Typescript: варианты компиляции.outDir и модули, отличные от ts

#typescript #module

#typescript #модуль

Вопрос:

У меня проблема с модулями, отличными от ts (текстовые ресурсы), в том, что они не переносятся во внешний каталог, как настроено в tsconfig.json (или я делаю это неправильно).

Вот самый простой пример воспроизведения

 // /src/main.ts
import text from 'text.dat'
console.log( text )

// /src/a.d.ts
declare module 'text.dat' {
    const value: string;
    export default value
}

// /tsconfig.json
{
  "compilerOptions": {
    "target": "es5",                      
    "module": "system",                   
...
    "outFile": "./public/bundle.js",      
    "outDir": "./public",                  
...

// /public/a.html
...
    <script type="text/javascript" src="bundle.js"></script>
    <script>
        SystemJS.import('main');
    </script>
...
  

Это приводит к HTTP 404, когда транспилированный javascript пытается загрузить мой текстовый модуль какhttp://localhost:8082/text.dat но исходный файл находится в папке /src и не копируется в /public.

Чего мне не хватает?

FWIW полный исходный код варианта воспроизведения находится по адресуhttps://github.com/duzenko/typescript-non-ts-module-bundle

Ответ №1:

К сожалению, это не поддерживается в компиляторе typescript Проблема с Typescript Github здесь

Что я бы порекомендовал вам сделать, если вы используете yarn или NPM, так это иметь скрипт, который перемещает эти файлы в нужное место после успешной компиляции. Допустим, у вас есть файл в src src/foo/bar.biz . после запуска tsc и вывода в ./build каталог запустите руководство cp src/foo/bar.biz build/foo/bar.biz