使用 npm 运行 postgraphile



我正在开发一个反应应用程序,并将apollo和postgraphile用于graphql。我目前必须打开两个终端窗口,一个正在运行

npm start 

对于 react-dev 服务器,并且一个正在运行

postgraphile -c 'postgresstring'

对于后石墨服务器

这样做时一切正常,但我将项目传递给我的团队的其他成员,并希望他们能够简单地运行

npm start

以启动 React 和 Postgraphile 服务器。我尝试同时使用 npm 包和 npm-start-all 在 npm start 上运行这两个脚本,但每次我使用 npm 运行 postgraphile 命令时,我在尝试实际查询 graphiql 中的 graphql 服务器时都会出错,说我有重复的 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.

如何通过 npm run 运行 postgraphile,以便我可以同时使用 npm-run-all 来运行它们? 请注意,简单地使用"node scripts/start.js&& postgraphile -c 'postgresstring'"是行不通的,因为它在运行postgraphile之前等待start.js服务器终止。

这是在 Node.js 生态系统中使用graphql的人来说,这是一个常见的痛苦。解决此问题的方法是在package.json中添加一个"resolutions"条目,通知 yarn 它应该尝试只安装一个版本,graphql@0.12.x,在该版本满足支持的 GraphQL 范围的任何位置,而不是安装多个版本。为此,请将以下内容添加到您的package.json文件中:

"resolutions": {
"graphql": "0.12.x"
}

然后再次运行yarn,您应该注意到您的yarn.lock文件已更新为仅引用graphql的一个版本。


解释

您运行的第一个postgraphile命令执行全局安装的postgraphile命令(通过npm install -g postgraphileyarn global add postgraphile安装(;它不会遇到此问题,因为它只有自己的依赖项并且它们不冲突。

但是,对于npm run命令,npm 会自动将本地./node_modules/.bin/文件夹添加到$PATH的开头,因此正在执行postgraphile的本地副本(通过yarn add postgraphile安装(。(这是你想要的行为!似乎您还安装了其他依赖于graphql的东西(也许是Apollo Client?(,并且您现在在node_modules文件夹中的某个位置有两个版本的graphql,每个版本位于不同的位置,并且postgraphile正在选择不同的版本来graphile-build,这导致了问题。

祝石墨后快乐!

相关内容

  • 没有找到相关文章

最新更新