如何使用 webpack 捆绑 puppeteer 进行生产部署?

Posted

技术标签:

【中文标题】如何使用 webpack 捆绑 puppeteer 进行生产部署?【英文标题】:How to bundle puppeteer for production deployment using webpack? 【发布时间】:2019-05-01 14:54:22 【问题描述】:

我正在使用 express 创建一个节点 API,它将使用 puppeteer 为给定的 url 创建一个 PDF。如何将我的应用程序与 webpack 捆绑在一起进行生产?我不想全局安装 puppeteer 并在我将托管它的服务器中表达,我不想在服务器上调用 npm install。我希望 puppeteer 和 express 与 js 文件一起出现。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

如果有人好奇我是如何解决这个问题的 - 我使用 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 文件夹中签入了代码? 不,我没有。我认为在 CI 服务器上 npm install 安装所有依赖项,包括开发依赖项(如 puppeteer),然后 webpack 将所有这些捆绑到可执行的 js 中。 npm ci 然后删除 node_modules 文件夹。 我在依赖项中使用 puppeteer 而不是 dev 依赖项,我必须将 node_modules 添加到我的仓库中,我无法将它捆绑在 .js 输出中 我遇到了像你这样的问题,但还没有幸运地解决它 您介意分享 package.json 文件吗?

以上是关于如何使用 webpack 捆绑 puppeteer 进行生产部署?的主要内容,如果未能解决你的问题,请参考以下文章

如何排除目录被 Webpack 捆绑?

如何使用 Webpack 捆绑 Express Js (NodeJs) 和 Pug 引擎?

如何单独捆绑供应商脚本并根据需要使用 Webpack?

如何调试打字稿代码,在 vscode/vs2015 中使用 webpack 捆绑

如何在使用 webpack 捆绑 React 时禁用严格模式

AWS Elastic Beanstalk - 如何使用 npm 和 webpack 构建捆绑 JS