如何基于节点模块从 JavaScript 文件创建构建?
How can I create a build from a JavaScript file based on node modules?
我使用
创建了一个新节点项目
npm init
npm install apollo-server
然后我使用以下代码添加了一个 index.js
文件:
const { ApolloServer, gql } = require('apollo-server');
const typeDefs = gql`
type Query {
hello: String
}
`;
const server = new ApolloServer({
typeDefs,
mocks: true,
});
server.listen().then(({ url }) => {
console.log(` Server ready at ${url}`)
});
虽然我可以 运行 使用 node index.js
,但我实际上如何从我的 index.js
创建构建,所以它在 运行 期间不直接需要模块时间? (目标:将其部署在 render.com 等平台上)
听起来您想创建一个不需要 server-side 配置或设置 运行 的可执行工件。
对此有几个选项。您可能正在寻找 Javascript 捆绑器,例如 Rollup, Parcel or Webpack。 Webpack 是使用最广泛的,但通常也是最难配置的。
使用捆绑器
包裹
使用 npm i -g parcel
安装 Parcel,然后将其添加到您的 package.json:
"main": "dist/index.js",
"targets": {
"main": {
"includeNodeModules": true
},
},
然后运行parcel build index.js
。就是这样!
我添加了一个简单的 demo on GitHub。
Webpack
有多个great answers on this SO question。
捆绑器注意事项
许多节点包都带有 binary/native addons. For example, Cypress 下载并安装浏览器。任何使用本机插件的包都不能与捆绑器一起工作,因为捆绑器无法添加二进制文件。这些包仍然需要安装。
另一种选择:构建二进制文件
在上述过程中,您的输出工件是单个 Javascript 文件。除了 Javascript 文件,您还可以生成一个二进制文件,从而减少安装 Node 运行 的需要。查看 pkg 来执行此操作。虽然 pkg
是一个相当成熟的产品,但通常仍被认为是一项实验性技术,因此可能不适合生产环境。另一方面,您不应该 运行 解决包含本机插件的软件包的任何问题。阅读文档以查看它是否适合您的用例。
https://github.com/vercel/ncc 这可能会有所帮助。它在最终工件
中包含 node_modules
我使用
创建了一个新节点项目npm init
npm install apollo-server
然后我使用以下代码添加了一个 index.js
文件:
const { ApolloServer, gql } = require('apollo-server');
const typeDefs = gql`
type Query {
hello: String
}
`;
const server = new ApolloServer({
typeDefs,
mocks: true,
});
server.listen().then(({ url }) => {
console.log(` Server ready at ${url}`)
});
虽然我可以 运行 使用 node index.js
,但我实际上如何从我的 index.js
创建构建,所以它在 运行 期间不直接需要模块时间? (目标:将其部署在 render.com 等平台上)
听起来您想创建一个不需要 server-side 配置或设置 运行 的可执行工件。
对此有几个选项。您可能正在寻找 Javascript 捆绑器,例如 Rollup, Parcel or Webpack。 Webpack 是使用最广泛的,但通常也是最难配置的。
使用捆绑器
包裹
使用 npm i -g parcel
安装 Parcel,然后将其添加到您的 package.json:
"main": "dist/index.js",
"targets": {
"main": {
"includeNodeModules": true
},
},
然后运行parcel build index.js
。就是这样!
我添加了一个简单的 demo on GitHub。
Webpack
有多个great answers on this SO question。
捆绑器注意事项
许多节点包都带有 binary/native addons. For example, Cypress 下载并安装浏览器。任何使用本机插件的包都不能与捆绑器一起工作,因为捆绑器无法添加二进制文件。这些包仍然需要安装。
另一种选择:构建二进制文件
在上述过程中,您的输出工件是单个 Javascript 文件。除了 Javascript 文件,您还可以生成一个二进制文件,从而减少安装 Node 运行 的需要。查看 pkg 来执行此操作。虽然 pkg
是一个相当成熟的产品,但通常仍被认为是一项实验性技术,因此可能不适合生产环境。另一方面,您不应该 运行 解决包含本机插件的软件包的任何问题。阅读文档以查看它是否适合您的用例。
https://github.com/vercel/ncc 这可能会有所帮助。它在最终工件
中包含node_modules