webpack打包node后端代码时puppeteer库报错

webpack生成后的代码里直接写的new Error找不到 “.”模块

报错点在这里https://github.com/GoogleChro...

const PROJECT_ROOT = fs.existsSync(path.join(__dirname, '..', 'package.json')) ? path.join(__dirname, '..') : path.join(__dirname, '..', '..');

static defaultRevision() {
    return require(path.join(PROJECT_ROOT, 'package.json')).puppeteer.chromium_revision;
}

我修改这个库的源码打印了一下fs.existsSync文件路径结果是存在的
webpack排除第三方库也可以打包并执行成功
但是webpack打包源码+第三方库的时候就找不到模块

webpack配置如下:

module.exports = {
  target: 'node',
  cache: true,
  entry: {
    main: path.join(__dirname, 'src', 'main')
  },
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist')
  },
  context: path.resolve(__dirname),
  node: {
    console: true,
    global: true,
    process: true,
    __filename: true,
    __dirname: true,
    Buffer: true,
    setImmediate: true
  },
  module: {
    rules: [
      {
        test: /.jsx?$/,
        include: [
          path.resolve(__dirname, 'node_modules')
        ],
        loader: 'octal-number-loader'
      },
      {
        test: /.jsx?$/,
        include: [
          path.resolve(__dirname, 'src')
        ],
        exclude: [
          path.resolve(__dirname, 'node_modules'),
          path.resolve(__dirname, 'bower_components')
        ],
        loader: 'babel-loader?cacheDirectory'
      }
    ]
  },
  plugins: [
    new CopyWebpackPlugin([
      { from: 'src/config', to: 'config' },
      {
        from: 'node_modules/puppeteer/.local-chromium/win64-515411/chrome-win32',
        to: 'chromium',
        ignore: ['interactive_ui_tests.exe', 'locales/*.pak']
      },
      {
        from: 'node_modules/puppeteer/.local-chromium/win64-515411/chrome-win32/locales/zh-CN.pak',
        to: 'chromium/locales/zh-CN.pak',
        flatten: true
      },
      {
        from: 'index.js'
      }
    ]),
    new LodashModuleReplacementPlugin(),
    new webpack.SourceMapDevToolPlugin({
      filename: '[name].js.map',
      exclude: ['vendor.js', 'manifest']
    }),
    new BundleAnalyzerPlugin({
      analyzerMode: 'static',
      reportFilename: 'report.html',
      openAnalyzer: false
    })
  ],
  resolve: {
    extensions: ['.js', '.json'],
    alias: {
      '~': path.resolve('./src')
    },
    mainFields: ['jsnext:main', 'main']
  },
  devServer: {
    publicPath: path.join('/dist/')
  },
  stats: {
    warnings: false,
    source: false,
    cached: false,
    children: false,
    chunks: false,
    chunkOrigins: false,
    modules: false
  }
}

.babelrc配置如下:

{
    "presets": [
        [
            "env",
            {
                "targets": {
                    "node": "current"
                },
                "modules": false
            }
        ]
    ],
    "plugins": [
        "lodash",
        "closure-elimination",
        "trace",
        "console",
        "transform-object-rest-spread",
        "transform-class-properties",
        "transform-exponentiation-operator",
        "transform-function-bind",
        "transform-decorators",
        "transform-do-expressions",
        "transform-strict-mode"
    ],
    "ignore": [
        "node_modules",
        "foo.js",
        "bar/**/*.js",
        "userDataDir",
        "tmp",
        "image",
        "download",
        "dist"
    ]
}
阅读 2.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题