8

I'm using react-pdf to render PDFs in React via CRA, and I import it like this:

import { Document, Page } from "react-pdf/dist/esm/entry.webpack";

Now, I'm trying to implement SSR with this webpack config:

// webpack.server.conf

const path = require("path");
const webpackNodeExternals = require("webpack-node-externals");

module.exports = {
  target: "node",
  entry: "./server/index.tsx",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "build-server"),
  },
  resolve: {
    extensions: [".ts", ".tsx", ".js"],
    modules: [path.resolve(__dirname, "src"), "node_modules"],
  },
  externals: [webpackNodeExternals()], // excludes node modules in Webpack
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        loader: "ts-loader",
        options: {
          configFile: "tsconfig.server.json",
        },
      },
      // we use url-loader as loader for webpack which transforms files into base64 URIs
      {
        test: /\.(gif|jpe?g|png|ico)$/,
        use: [
          {
            loader: "url-loader",
            options: {
              limit: 10000,
            },
          },
        ],
      },
      {
        test: /\.(otf|eot|ttf|woff|woff2).*$/,
        use: [
          {
            loader: "url-loader",
            options: {
              limit: 10000,
            },
          },
        ],
      },
      {
        test: /\.s[ac]ss$/i,
        use: ["file-loader"],
      },
      {
        test: /\.svg$/,
        use: ["@svgr/webpack"],
      },
    ],
  },
  optimization: {
    nodeEnv: "development", // NODE_ENV
  },
};

To build my SSR I run:

webpack --config webpack.server.js --mode=development

And I start the server like this:

nodemon ./build-server/bundle.js

Now, everything works fine besides that import string above, I get the following error:

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:915:16)
    at Module._compile (internal/modules/cjs/loader.js:963:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Module.require (internal/modules/cjs/loader.js:887:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at eval (webpack:///external_%22react-pdf/dist/esm/entry.webpack%22?:1:18)
    at Object.react-pdf/dist/esm/entry.webpack (/Users/max/Code/Lawplus/docket/build-server/bundle.js:2314:1)
    at __webpack_require__ (/Users/max/Code/Lawplus/docket/build-server/bundle.js:20:30)

Not sure if that helps, but I had exactly the same error when I was introducing jest, that time I fixed it by adding:

  "jest": {
    "moduleNameMapper": {
      "^react-pdf": "react-pdf/dist/umd/entry.jest"
    }
  },

to my package.json. I guess I need to modify my webpack.server.js to make it work, but how?

Max Filippov
  • 2,024
  • 18
  • 37

0 Answers0