Экспорт пользовательского модуля ES6 и импорт в другой локальный проект всегда неопределен или {} в TypeScript - PullRequest
0 голосов
/ 25 мая 2019

Я работаю с TypeScript 3.4.5 и Webpack 4.32.2 в Windows 10 через WSL.

Я пытаюсь создать локальный пакет инструментов, который объединяет базовые классы в индексный файл, куда я их экспортирую. Независимо от того, как я экспортирую или импортирую в другие проекты, импортируемые классы всегда либо «неопределенные», либо пустой объект «{}».

Я пытался связать этот пакет 'api-tools' с помощью npm и другого локального проекта, а также попытался просто установить его с помощью метода файловой зависимости package.json, то есть: {"api-tools": "file :. ./api-tools "}, и в обоих сценариях результат один и тот же.

Вот индексный файл пакета api-tools:

index.ts:

import RestAPI from './lib/RestAPI';
export { RestAPI };

Вот библиотека RestAPI:

Lib / RestAPI.ts:

export default class RestAPI {
    handle(req, res) {}
}

В потребляющем проекте я импортирую его так:

import { RestAPI } from 'api-tools';
console.log(RestAPI);

но запись этого объекта в консоль показывает, что он не определен.

Я пробовал разные синтаксисы экспорта и импорта, т. Е .:

// RestAPI.ts:
export class RestAPI { 
    handle() {}
}

// index.ts:
import { RestAPI } from './lib/RestAPI';
console.log(RestAPI);

exports = { 
    RestAPI: RestAPI
}
// also tried module.exports = {...}

Размещение этого файла console.log показывает, что экспортированный RestAPI определен правильно со всеми его свойствами. Отсюда я пытаюсь использовать его в проектах-потребителях по-разному:

// both give empty object {}
import * as RestAPI from 'api-tools';
import RestAPI from 'api-tools';

// gives undefined
import { RestAPI } from 'api-tools';

console.log(RestAPI);

Они всегда дают пустой объект, иначе он не определен.

Может ли это быть просто TypeScript / типизацией? Все прекрасно, и пути проектов кажутся хорошими, как для скомпилированного index.js, так и для файла типов index.d.ts, который определяет api-tools package.json.

package.json:

{
  "main": "build/index.js",
  "types": "build/src/index.d.ts",
}

tsconfig.json:

{
    "compilerOptions": {
        "declaration": true,
        "incremental": true,
        "baseUrl": "./",
        "outDir": "build",
        "module": "es6",            // specifiy module code generation
        "moduleResolution": "node",
        "target": "es6",         // specify ECMAScript target version
        "strict": true,
        "resolveJsonModule": true
    },
    "types": [ "webpack-env", "node" ]
}

Может ли быть какая-то проблема с этим через WSL? Или даже веб-пакет?

Я также пытался опубликовать пакет в npm и импортировать его через обычный процесс установки npm, но происходит то же самое, что заставляет меня думать, что это может быть что-то с моей конфигурацией или пониманием модулей.

Спасибо за любую помощь, пытался понять это слишком долго: -].

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

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

output: {
    library: 'api-tools',
    libraryTarget: 'umd'
},
0 голосов
/ 25 мая 2019

В index.ts, попробуйте:

export { default as RestAPI } from './lib/RestAPI';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...