Я пытаюсь создать загрузчик webpack, который преобразует файл, содержащий описание структур данных API, в набор интерфейсов TypeScript.
В моем конкретном случае файл JSON, но это в конечном счете не имеет значения - файл является только общим источником данных, описывающих взаимодействие между бэкэнд-серверами веб-приложений и интерфейсами (-ами). В моем MCVE ниже вы можете видеть, что файл JSON содержит пустой объект, чтобы подчеркнуть, как тип и содержимое файла не имеют значения для проблемы.
Моя текущая попытка сообщает о двух ошибках (я предполагаю, что вторая вызвана первой):
[at-loader]: Child process failed to process the request: Error: Could not find file: '/private/tmp/ts-loader/example.api'.
ERROR in ./example.api
Module build failed: Error: Final loader didn't return a Buffer or String
Как я могу сгенерировать TypeScript код с помощью загрузчика webpack?
package.json
{
"name": "so-example",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"build": "webpack"
},
"dependencies": {
"awesome-typescript-loader": "^3.2.3",
"typescript": "^2.6.1",
"webpack": "^3.8.1"
}
}
webpack.config.js
const path = require('path');
module.exports = {
entry: './index.ts',
output: {
filename: 'output.js',
},
resolveLoader: {
alias: {
'my-own-loader': path.resolve(__dirname, "my-own-loader.js"),
},
},
module: {
rules: [
{
test: /\.api$/,
exclude: /node_modules/,
use: ["awesome-typescript-loader", "my-own-loader"],
},
{
test: /\.tsx?$/,
exclude: /node_modules/,
loader: "awesome-typescript-loader",
},
]
},
};
My-собственность- loader.js
module.exports = function(source) {
return `
interface DummyContent {
name: string;
age?: number;
}
`;
};
index.ts
import * as foo from './example';
console.log(foo);
example.api
{}
Я понимаю, что существуют другие методы генерации кода. Например, я мог бы конвертировать мои файлы JSON в TypeScript с помощью некоторого инструмента сборки и проверить их. Я ищу более динамическое решение.
my-own-loader.js не экспортирует json, а строку.
Это правильно, так же как и загрузка файла изображения, не всегда экспортирует двоичные данные, но иногда выводит структуру данных JavaScript, представляющую метаданные об изображении.
Почему вам нужно определить интерфейсы TypeScript из json файла? Используются ли интерфейсы для компиляции TypeScript?
Да. Я хочу импортировать файл, описывающий структуры данных API, и автоматически создавать соответствующие интерфейсы TypeScript. Наличие общего файла позволяет интерфейсу (-ам) и бэкэнд (-ям) всегда соглашаться с тем, какие данные будут присутствовать.