Как экспортировать мою библиотеку с путями, используя webpack? - PullRequest
0 голосов
/ 02 марта 2019

На самом деле моя библиотека экспортирует ресурсы, которые будут импортированы таким образом:

import { fooComponent } from 'my-library/lib/components'
import { fooHook } from 'my-library/lib/hooks'

Что мне нужно изменить в моем webpack.config.js, чтобы можно было импортировать мои ресурсы таким образом?

import { fooComponent } from 'my-library/components'
import { fooHook } from 'my-library/hooks'

My webpack.config.js:

  ...
  entry: {
    components: './src/components/index.js',
    hooks: './src/hooks/index.js',
    index: './src/index.js',
    services: './src/services/index.js',
    templates: './src/templates/index.js'
  },
  ...
  output: {
    filename: '[name].js',
    globalObject: 'typeof self !== "undefined" ? self : this',
    library: 'my-library',
    libraryTarget: 'umd',
    path: path.join(fileRoot, 'lib'),
    umdNamedDefine: true
  },

Изменить path: path.join(fileRoot, 'lib') на path: path.join(fileRoot, '') не вариант, потому что мне нужен путь распространения.

Возможно ли решить эту проблему, используяTypeScript или Webpack?

1 Ответ

0 голосов
/ 02 марта 2019

Во-первых, это не проблема с Webpack.Webpack объединит все, согласно вашей конфигурации, в ./lib/[name].js, и это именно то, что вы хотите, поскольку вам нужен путь распространения.Итак, работа Webpack на этом заканчивается.

Введите роль package.json, которая определяет, какие пакеты доступны и где.Давайте рассмотрим два разных кода и то, что происходит под капотом (упрощение):

import lib from 'my-lib';

  1. ищем скрипт, обозначенный в 'node_modules / my-lib / package.json# main`
  2. импортировать все как lib из этого скрипта

import { someComponent } from 'my-lib/lib/components';

  1. искать 'node_modules / my-lib / lib /components.js , or node_modules / my-lib / lib / components / index.js`
  2. import someComponent из этого скрипта

Так что, похоже, нетбыть любой возможной конфигурацией пакета, которая просто позволит вам удалить lib из ваших импортов.Но разве это большая проблема?Это всего три буквы ?

...