Экспорт не определен при попытке связать библиотеку машинописи с веб-пакетом - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть библиотека, которую я разрабатываю в машинописи. У меня есть решение собрать его через tsc, чтобы использовать его как пакет npm, но tsc транслирует каждый файл отдельно. Я хотел бы использовать веб-пакет для создания пакета всего в одном минимизированном файле, но он не работает. Я провел несколько тестов (создал простой пакет в JS, используя module.exports / require, и он работал, пакет JS, который не смог использовать экспорт / импорт синтаксиса es6), так что я думаю, что я исхож из синтаксиса импорта / экспорта машинописного текста .. Но я ожидал, что загрузчик (я пытался ts-loader et awesome-ts-loader) перевести его, но в каждом случае, когда я пытаюсь импортировать пакет, он всегда возвращает «undefined».

это мой файл tsconfig.json:

{
    "compilerOptions": {
        "declaration": true,
        "outDir": "./dist/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "es6",
        "target": "es6",
        "resolveJsonModule": true,
        "moduleResolution": "node"
    },
    "exclude": [
        "node_modules"
    ]
}

(для модуля и цели я пытался перейти на commonjs для модуля и старых тегов, но это ничего не меняет ....)

Вот файл конфигурации веб-пакета:

const path = require('path');

module.exports = {
    entry: './src/index.ts',
    mode: 'production',
    module: {
        rules: [
            {
                test: /\.ts$/,
                use: 'ts-loader',
                exclude: '/node_modules/'
            }
        ]
    },
    resolve: {
        extensions: ['.ts']
    },
    output: {
        filename: 'index.js',
        path: path.resolve(__dirname, 'dist'),
        library: '',
        libraryTarget: 'commonjs2',
        libraryExport: 'default'
    }
};

и очень простой src / index.ts

export function foo() {
    console.log('this is foo');
}

но невозможно импортировать функцию foo ... Я сделал тестовый файл, в другом проекте. Я использовал «npm link» в проекте библиотеки, чтобы зарегистрировать пакет в глобальных модулях, и «npm link @ kalika-library / mixins» в тестовом проекте, чтобы добавить его в node_modules. Вот простой тест, который я сделал:

import * as foo from '@kalika-libraries/mixins';

console.log('foo', foo);

Но он всегда записывает "undefined" ...

Я искал несколько часов, пробуя разные конфигурации tsconfigs или webpack, но это всегда одно и то же ... Единственный случай, когда импорт работал, был при использовании tsc ... Но, глядя на некоторые библиотеки (например, angular), я знаю, что связанные библиотеки возможный ! Я просто не знаю, как это сделать (возможно, я не использую нужные инструменты ...).

Да, и вот package.json библиотеки, на всякий случай:

{
    "name": "@kalika-libraries/mixins",
    "version": "1.0.0",
    "description": "Libraries to apply mixins on classes",
    "main": "dist/index.js",
    "types": "dist/index.d.ts",
    "scripts": {
        "build": "npx webpack"
    },
    "author": "Kalika",
    "license": "MIT",
    "devDependencies": {
        "@types/yeoman-generator": "^3.0.1",
        "codelyzer": "^5.0.0",
        "rxjs-tslint-rules": "^4.21.0",
        "ts-loader": "^5.3.3",
        "tslint-consistent-codestyle": "^1.15.1",
        "tslint-eslint-rules": "^5.4.0",
        "tslint-sonarts": "^1.9.0",
        "typescript": "^3.3.3",
        "vrsource-tslint-rules": "^6.0.0",
        "webpack": "^4.29.6",
        "webpack-cli": "^3.3.0"
    }
}

И я использовал команду «npx webpack» в папке библиотеки, чтобы собрать ее.

Так что, если у вас есть идея (надеюсь, вы не предложите решения, которые я уже пробовал), я был бы рад проверить!

спасибо.

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