Исключить локальную библиотеку TypeScript из комплекта приложения - PullRequest
0 голосов
/ 02 октября 2018

Как я могу исключить локальную библиотеку TypeScript из комплекта, созданного для моего приложения?В моем случае я хочу предоставить пакет для моей библиотеки TypeScript и пакет для моего приложения в виде отдельных файлов JavaScript.

Моя библиотека

index.ts

export class Greeter {
    public greet(): void {
        console.log("Hello World"); 
    }
}

package.json

{
    "private": true,
    "devDependencies": {
        "typescript": "3.1.1",
        "ts-loader": "5.2.1",
        "webpack": "4.20.2",
        "webpack-cli": "3.1.2"
    },
    "scripts": {
        "start": "webpack"
    }
}

tsconfig.json

{
    "compilerOptions": {
        "module": "es6",
        "target": "es5"
    }
}

webpack.config.js

module.exports = {
    entry: './src/index.ts',
    resolve: { extensions: [".js", ".ts"] },
    output: { filename: 'bundle.js', library: '@mylib', libraryTarget: 'umd' },
    module: { rules: [ { test: /\.ts$/, use: 'ts-loader' } ] }
};

Мое приложение

index.ts

import {Greeter} from "@mylib/index";

new Greeter().greet();

package.json

{
    "private": true,
    "devDependencies": {
        "typescript": "3.1.1",
        "tsconfig-paths-webpack-plugin": "3.2.0",
        "ts-loader": "5.2.1",
        "webpack": "4.20.2",
        "webpack-cli": "3.1.2"
    },
    "scripts": {
        "start": "webpack"
    }
}

tsconfig.json

{
    "compilerOptions": {
        "baseUrl": ".",
        "paths": { "@mylib/*": ["../mylib/src/*"] },
        "module": "es6",
        "target": "es5"
    }
}

webpack.config.js

const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');

module.exports = {
    entry: './src/index.ts',
    resolve: { extensions: [".ts", "js"], plugins: [new TsconfigPathsPlugin({})] },
    output: { filename: 'bundle.js' },
    module: { rules: [ { test: /\.ts$/, use: 'ts-loader' } ] }
};

В моем примерекод библиотеки входит в комплект приложения.Я хотел бы, чтобы библиотека была не включена , чтобы я мог предоставить ее в виде отдельного пакета.

1 Ответ

0 голосов
/ 02 октября 2018

Использование externals

Параметр конфигурации externals позволяет исключить зависимости из выходных пакетов.Вместо этого созданный пакет полагается на то, что эта зависимость присутствует в среде потребителя.Эта функция обычно наиболее полезна для разработчиков библиотек, однако для нее существует множество приложений.

Вы хотите объявить @mylib как внешнюю библиотеку в конфигурации веб-пакета.

externals : {
  '@mylib': 'mylib',
},

Кроме того, Typescript также нужны наборы для библиотеки.Таким образом, вы должны определить их в файле для ввода.Это рабочий пример

typings.d.ts

declare module '@mylib' {
    export class Greeter {
        greet();
    }
}
...