Во время разработки моего модуля React npm я обозначил его npm link.
После этого пакет правильно связан, а также появляется в приложении для потребителей node_modules.
Модуль предоставляет интерфейс для создания компонента React. Поскольку я использую React, jsx и es2015, я использую babel для перевода кода модуля на этапе предварительного опубликования с помощью npm prepublish hook.
Однако, когда я пытаюсь создать свое потребительское приложение с webpack (т.е. после его связывания), в моем пакете возникает ошибка:
Ошибка сборки модуля: Ошибка: не удалось найти предустановленный "es2015"
Теперь смешно, что если я опубликую пакет на npm, то npm install из реестра моего потребительского приложения, постройте его, все будет хорошо.
Я попытался установить babel-preset-es2015 в своем приложении для пользователей, но потом начинает жаловаться на то, что не нашел babel:
Модуль не найден: Ошибка: не удается разрешить модуль 'babel'
Опять же, если я устанавливаю его из реестра npm, все работает нормально, во время сборки не возникают ошибки.
Я также пробовал установить babel-core, babel-cli и babel-polyfill, все безрезультатно.
Я использую babel v6.1.x всюду и осведомлен о всех последних изменениях, однако, я думаю, что мне не хватает чего-то очевидного и я бы очень признателен, если кто-то может мне помочь, потому что постоянно публикую модуль, чтобы проверить, вещи - это просто плохая практика.
Для полноты здесь приведен код:
Ниже перечислены шаги, которые я выполняю, чтобы связать модуль:
-
cd ~/Sites/me/react-leafbox -
npm link -
cd ~/Sites/me/mapp -
npm link react-leafbox -
npm start
Трассировка стека после сборки:
ERROR in ../react-leafbox/lib/index.js
Module build failed: Error: Couldn't find preset "es2015"
at OptionManager.mergePresets (/Users/daniel/Sites/me/mapp/node_modules/babel-core/lib/transformation/file/options/option-manager.js:329:17)
at OptionManager.mergeOptions (/Users/daniel/Sites/me/mapp/node_modules/babel-core/lib/transformation/file/options/option-manager.js:289:12)
at OptionManager.addConfig (/Users/daniel/Sites/me/mapp/node_modules/babel-core/lib/transformation/file/options/option-manager.js:223:10)
at OptionManager.findConfigs (/Users/daniel/Sites/me/mapp/node_modules/babel-core/lib/transformation/file/options/option-manager.js:366:16)
at OptionManager.init (/Users/daniel/Sites/me/mapp/node_modules/babel-core/lib/transformation/file/options/option-manager.js:410:12)
at File.initOptions (/Users/daniel/Sites/me/mapp/node_modules/babel-core/lib/transformation/file/index.js:191:75)
at new File (/Users/daniel/Sites/me/mapp/node_modules/babel-core/lib/transformation/file/index.js:122:22)
at Pipeline.transform (/Users/daniel/Sites/me/mapp/node_modules/babel-core/lib/transformation/pipeline.js:42:16)
at transpile (/Users/daniel/Sites/me/mapp/node_modules/babel-loader/index.js:14:22)
at Object.module.exports (/Users/daniel/Sites/me/mapp/node_modules/babel-loader/index.js:83:14)
@ ./src/js/components/App.jsx 2:10-34
Трассировка стека после добавления дополнительных зависимостей, связанных с Babel (которые, я считаю, не обязательно, потому что они доступны в модуле response-leafbox):
ERROR in ../react-leafbox/lib/index.js
Module not found: Error: Cannot resolve module 'babel' in /Users/daniel/Sites/me/react-leafbox/lib
@ ../react-leafbox/lib/index.js 8:11-39
Я использую node v5.0.0 с npm v3.3.6 на MAC OSX El Capitan v10.11.1. Я также попытался использовать node v4.2.1 с npm 2.14.7, что дает мне те же ошибки.