Экспорт нескольких модулей из пакета NPM

У меня довольно большой проект A с использованием Node и Typescript. В проекте A у меня есть много разных модулей, которые я хотел бы повторно использовать в другом проекте B.

Поэтому я создал проект A с этим tsconfig.json:

{
    "compilerOptions": {
        "target": "es2017",
        "module": "commonjs",
        "declaration": true,
        "outDir": "./dist",
        "sourceMap": true,
        "strict": true,
        "noImplicitAny": true,
        "strictNullChecks": true,
        "typeRoots": ["./node_modules/@types", "./modules/@types"]
    },
    "exclude": ["node_modules"]
}

Итак, все файлы встраиваются в папку / dist следующим образом:

  • dist
    • moduleA.js
    • moduleA.map
    • модульA.d.ts
    • модульB.js
    • moduleB.map
    • модульB.d.ts
    • ….

Чтобы использовать эти moduleA и moduleB в другом проекте, я добавляю следующее в package.json в Project A:

    "name": "projectA",
    "version": "1.0.0",
    "description": "...",
    "main": "dist/moduleA.js",
    "typings": "dist/moduleA.d.ts",

Я использую рабочие области пряжи для доступа к Project A как к пакету в Project B. Но проблема в том, что я могу получить доступ только к moduleA, когда использую import {ModuleA} from 'projectA' в моем новом проекте B? Итак, как я могу получить доступ к дополнительным модулям из ProjectA?

См. также:  как включить несколько файлов ресурсов в SAM template.yml
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. Jolle

    Поможет ли вам простая консолидация всего экспорта в один index.ts?

    package.json (проектA):

    {
      "main": "dist/index.js",
      "typings": "dist/index.d.ts",
      ...
    }
    

    index.ts (projectA):

    // Adjust the relative import paths 
    // and identifiers to your structure
    export { ModuleA } from "./moduleA";
    export { ModuleB } from "./moduleB";
    

    Некоторый модуль в проектеB:

    import {ModuleA, ModuleB} from 'projectA'
    

    см. также этот ответ: stackoverflow.com/questions / 34072598 / person Jolle; 17.08.2019

    Это не отвечает на вопрос. Что делать, если вы не хотите включать модули или хотите иметь дело с большим размером файла? person Jolle; 01.06.2020

  2. Jolle

    Я считаю, что вы ищете: https://nodejs.org/api/packages.html#packages_package_entry_points

    Неясно, поддерживает ли его в настоящее время TypeScript или нет: https://github.com/microsoft/TypeScript/issues/33079

    Похоже, вы можете обойти это, хотя в вашем package.json есть что-то вроде этого:

    {
        ...
    
        "main": "./dist/index.js",
        "types": "./dist/index.d.ts",
        "typesVersions": {
            "*": {
              "dist/index.d.ts": [ "dist/index.d.ts" ],
              "*": [ "dist/*" ]
            }
          },
        "exports": {
            ".": "./dist/index.js",
            "./": "./dist/"
        },
    
        ...
    }
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: