Классы не находятся в сборке, если они не созданы - PullRequest
0 голосов
/ 03 сентября 2018

Я пишу небольшую библиотеку для некоторых простых компонентов, чтобы выучить немного TypeScript, но есть проблема при сборке библиотеки, когда явно не создается экземпляр класса.

Я хочу иметь возможность, используя строку, создать экземпляр класса. Сразу после определения класса я добавляю имя класса и конструктор к объекту.

/**
 * Component class store
 */
let classes: { [key: string]: IConstructable<IComponent> } = {};

export function addToDynamic(cls: IConstructable<IComponent>) {
    classes[cls.name] = cls;
}

/**
 * A component
 */
export class Container extends BaseComponent implements IComponent {
    items: object[];

    constructor() {
        super();
    }
}

addToDynamic(Container);

Следующий код не работает, потому что Container не создан:

import { Container } from './gui/container';
import { DynamicClass } from './gui/base';

let c2:Container = new DynamicClass('Container') as Container;
c2.add(document.body);

Однако в сборку будет включен Container:

import { Container } from './gui/container';
import { DynamicClass } from './gui/base';

let c1:Container = new Container();
let c2:Container = new DynamicClass('Container') as Container;
c2.add(document.body);

Мой webpack.config.js:

const path = require('path');

module.exports = {
    mode: 'development',
    entry: './src/index.ts',
    devtool: 'inline-source-map',
    devServer: {
        contentBase: './dist'
    },
    module: {
        rules: [
        {
            test: /\.tsx?$/,
            use: 'ts-loader',
            exclude: /node_modules/
        }]
    },
    resolve: {
        extensions: [ '.ts', '.js' ]
    },
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
        library: 'sugar-ant-lib',
        libraryTarget: 'umd'
    }
};

Вопрос в том, как включить все файлы в src?

Обновление

Добавление строки ниже к моему index.ts добавляет файл в сборку.

import './gui/container';

Также я понял, что это может иметь отношение к директивам tripple-slash , но я пока не знаю.

1 Ответ

0 голосов
/ 03 сентября 2018

Webpack создает граф зависимостей, идентифицируя import или рекурсивно запрашивая ключевое слово из ваших файлов. Если какие-либо файлы, которые не импортируются в ваш проект, веб-пакет не может их найти. Это даст преимущество, удалив неиспользуемые файлы в сборке

Одним из решений является явное добавление оператора импорта для любых файлов, поэтому веб-пакет добавит это также в граф зависимостей.

Другим решением будет динамический импорт, динамически импортируйте файл в ваш код там, где он лучше всего подходит, имя файла будет динамическим. Таким образом, веб-пакет создаст модуль на основе имени.

https://medium.com/front-end-hacking/webpack-and-dynamic-imports-doing-it-right-72549ff49234

Подробнее о графике зависимостей

https://webpack.js.org/concepts/dependency-graph/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...