apollo-server-express: Add direct dependency on express.#3239
Conversation
The [literal `import`-ing of `express` in `ApolloServer.ts`][1] isn't new but, prior to #3047, it had only been a typing dependency — not an actual runtime dependency — since the TypeScript compiler doesn't emit `require`s when only types are utilized. To see this first hand, see [the emitted `dist/ApolloServer.js` in `apollo-server-express@2.8.2`][2] compared to [the same file in `apollo-server-express@2.9.0`][3]. (Hard to decipher, but check around like 15 and search for `"express"` in the second link.) Now that we actually utilize `express.Router` to build the composition of middleware in #3047 , it's true that `express` is no longer just a type dependency, but does warrant being a regular dependency as well! Since this has never been the case before during the entirety of the v2 line, I'm a bit concerned about introducing it now, but it seems other integrations like `apollo-server-koa` already have similar requirements going back to its introduction in [#1282][4] https://github.com/apollographql/apollo-server/blob/92ea402a90bf9817c9b887707abbd77dcf5edcb4/packages/apollo-server-koa/package.json#L41 Furthermore, we already have similar direct dependencies on other packages which we use directly, like [`cors`][5] and [`body-parser`][6]: https://github.com/apollographql/apollo-server/blob/ff3af66a0f3c63bfb056feca82fc7e7b7592b4a5/packages/apollo-server-express/package.json If this turns out to be problematic, we could consider declaring it only in `peerDependencies`, but those come with their own [share of confusion][7]. [1]: https://github.com/apollographql/apollo-server/blob/6d9c3b8c97/packages/apollo-server-express/src/ApolloServer.ts#L1 [2]: https://unpkg.com/apollo-server-express@2.8.2/dist/ApolloServer.js [3]: https://unpkg.com/apollo-server-express@2.9.0/dist/ApolloServer.js [4]: #1282: [5]: https://npm.im/cors [6]: https://npm.im/body-parser [7]: npm/rfcs#43 Fixes: #3238
|
Just making note that our users are now limited to |
|
@trevor-scheer They're not necessarily limited to that range, though an incompatible version would result in a duplicated The |
The literal
import-ing ofexpressinApolloServer.tsisn't new but, prior to #3047, it had only been a typing dependency — not an actual runtime dependency — since the TypeScript compiler doesn't emitrequires when only types are utilized.To see this first hand, see the emitted
dist/ApolloServer.jsinapollo-server-express@2.8.2compared to the same file inapollo-server-express@2.9.0. (Hard to decipher, but check around like 15 and search for"express"in the second link.)Now that we actually utilize
express.Routerto build the composition of middleware in #3047 , it's true thatexpressis no longer just a type dependency, but does warrant being a regular dependency as well!Since this has never been the case before during the entirety of the v2 line, I'm a bit concerned about introducing it now, but it seems other integrations like
apollo-server-koaalready have similar requirements going back to its introduction in #1282apollo-server/packages/apollo-server-koa/package.json
Line 41 in 92ea402
Furthermore, we already have similar direct dependencies on other packages which we use directly, like
corsandbody-parser:https://github.com/apollographql/apollo-server/blob/ff3af66a0f3c63bfb056feca82fc7e7b7592b4a5/packages/apollo-server-express/package.json
If this turns out to be problematic, we could consider declaring it only in
peerDependencies, but those come with their own share of confusion.Fixes: #3238