Запустить postgraphile с помощью npm
Я работаю над приложением реакции и использую apollo и postgraphile для graphql. В настоящее время у меня должно быть открыто два окна терминала, одно работает
npm start
для сервера act-dev и одного работающего
postgraphile -c 'postgresstring'
для постграфического сервера
при этом все работает, но я передаю проект остальной части моей команды и хотел бы, чтобы они могли просто запустить
npm start
запустить как реактивный, так и постграфический серверы. Я пытался использовать пакеты npm одновременно и npm-start-all для запуска обоих сценариев при запуске npm, но каждый раз, когда я использую npm для запуска команды postgraphile, я получаю ошибки при попытке фактически запросить сервер graphql в graphiql, говоря, что у меня есть дубликат экземпляры GraphQL работает. это происходит, даже если я помещаю команду postgraphile в собственную команду npm, например
"graphql": "postgraphile -c 'postgresstring'"
и беги
npm run graphql
сообщение об ошибке:
Error: Cannot use GraphQLSchema "[object Object]" from another module or realm.
Ensure that there is only one instance of "graphql" in the node_modules
directory. If different versions of "graphql" are the dependencies of
other relied on modules, use "resolutions" to ensure only one version
is installed.
https://yarnpkg.com/en/docs/selective-version-resolutions
Duplicate "graphql" modules cannot be used at the same time since different
versions may have different capabilities and behavior. The data from one
version used in the function from another could produce confusing and
spurious results.
Как я могу запустить postgraphile через npm run, чтобы я мог использовать одновременно или npm-run-all для запуска их обоих с помощью одной команды? обратите внимание, что простое использование "node scripts/start.js && postgraphile -c 'postgresstring'" не сработает, поскольку ожидает завершения работы сервера start.js перед запуском postgraphile.
1 ответ
Это общая боль для людей, работающих с graphql
в экосистеме Node.js. Чтобы решить эту проблему, нужно добавить "resolutions"
вход в ваш package.json
информируя пряжу, что она должна попытаться установить только одну версию, graphql@0.12.x
везде, где эта версия удовлетворяет поддерживаемым диапазонам GraphQL, а не устанавливает несколько версий. Для этого добавьте что-то подобное в свой package.json
файл:
"resolutions": {
"graphql": "0.12.x"
}
Тогда беги yarn
снова, и вы должны заметить, что ваш yarn.lock
Файл был обновлен, чтобы ссылаться только на одну версию graphql
,
объяснение
Первый postgraphile
команда, которую вы запускаете, выполняет глобально установленную postgraphile
команда (устанавливается через npm install -g postgraphile
или же yarn global add postgraphile
); который не страдает этой проблемой, потому что у него есть только свои собственные зависимости, и они не конфликтуют.
Однако для npm run
Команда npm автоматически добавляет ваш локальный ./node_modules/.bin/
папка к началу $PATH
и, таким образом, ваша локальная копия postgraphile
(устанавливается через yarn add postgraphile
) выполняется вместо. (Это поведение, которое вы хотите!) Кажется, вы также установили что-то еще, что зависит от graphql
(возможно Apollo Client?) и у вас теперь есть две версии graphql
где-то в вашем node_modules
папка, каждая в разных местах, и postgraphile
подбирает другую версию graphile-build
, который вызывает проблему.
Счастливого постграфика!