如何使用Webpack将Puppeteer打包用于生产部署?

4

我正在使用Express创建一个Node API,它将使用Puppeteer为给定的URL创建PDF。如何使用Webpack捆绑我的应用程序以进行生产?我不想在托管它的服务器上全局安装Puppeteer和Express,也不想在服务器上调用npm install。我希望Puppeteer和Express与JS文件一起打包。我该怎么做?

1个回答

5
如果有人好奇我是如何解决这个问题的,我使用了以下配置的 webpack:
import webpack from 'webpack';
import path from 'path';
import nodeExternals from 'webpack-node-externals';

const config: webpack.Configuration = {
    mode: "production",
    entry: "./src/server.ts",
    target: "node",
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: "main.js"
    },
    resolve: {
        extensions: [".ts", ".js"],
      },
    devtool: "source-map",
    module: {
        rules: [
            {
                test: /\.ts$/,
                exclude: /node_modules/,
                use: {
                    loader: "ts-loader",
                    options: {
                        transpileOnly: true
                    }
                }
            }
        ],
    },
    externals: nodeExternals()
}

export default config;

在持续集成服务器上,我运行以下命令:
npm install
webpack
npm ci

这里的窍门在于使用npm ci(自npm v6以来),它会从node_modules中移除devDependencies。之后,我将node_modules与转译后的js文件一起打包到部署包中。

你的意思是你把 node_modules 文件夹和代码一起提交了吗? - Ahmed Mohamed
不,我没有。我认为在CI服务器上,“npm install”会安装所有的依赖项,包括像puppeteer这样的开发依赖项,然后webpack将所有内容捆绑成可执行的js文件。“npm ci”然后会删除“node_modules”文件夹。 - Dainius Lukša
1
我在依赖项中使用了puppeteer而不是开发依赖项,并且我不得不将node_modules添加到我的repo中,因为我无法将其捆绑到.js输出中。 - Ahmed Mohamed
我有一个和你类似的问题,但是还没有幸运地解决它。 - Ahmed Mohamed
你介意分享 package.json 文件吗? - Ahmed Mohamed
抱歉,我不再参与这个项目了,我没有它。 - Dainius Lukša

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接