Включая React в качестве веб-пакета, внешние результаты не могут найти модуль «реагировать» - PullRequest
0 голосов
/ 23 сентября 2019

Я создаю пакет NPM с часто используемыми компонентами в нескольких проектах.Я не хочу связывать свой собственный реактив / реактив в этом пакете, поэтому я делаю следующее в моем webpack.config.js:

  externals: {
    react: {
      commonjs: 'react',
      commonjs2: 'react'
    },
    'react-dom': {
      commonjs: 'react-dom',
      commonjs2: 'react-dom'
    }
}

Я также указал две вышеуказанные зависимости как peerDependencies в моем package.json

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

Когда я собираю свой родительский проектОднако проект с моим пакетом в качестве зависимости, я получаю эту ошибку:

Error: Cannot find module 'react'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/package/dist/main.js:1:898)
    at n (/package/dist/main.js:1:62)
    at Module.<anonymous> (/package/dist/main.js:22:45607)
    at n (/package/dist/main.js:1:62)
    at /package/dist/main.js:1:861
    at Object.<anonymous> (/package/dist/main.js:1:872)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Module._compile (/parent-project/node_modules/pirates/lib/index.js:99:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Object.newLoader [as .js] (/parent-project/node_modules/pirates/lib/index.js:104:7)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12) code: 'MODULE_NOT_FOUND' }

Мне было интересно, есть ли у кого-нибудь идеи, где я иду не так?Родительский проект - это приложение NextJS, если это помогает ...

РЕДАКТИРОВАТЬ: Я попытался включить пакет в стандартный проект create-react-app, и это работает.Так что теперь я думаю, что это связано с шагом рендеринга на стороне сервера NextJS?

1 Ответ

0 голосов
/ 24 сентября 2019

Вот что у меня сработало:

В моем выходном конфиге webpack у меня было следующее:

  output: {
    filename: '[name].js',
    path: __dirname + '/dist',
    libraryTarget: 'commonjs'
  },

Мне нужно было libraryTarget, чтобы быть umd, чтобы сделать пакетработать как на клиенте, так и на сервере.До этого мой пакет работал на клиенте, но не на сервере.

...