bundle.js 2.83 kB 0 [emitted] main bundle.js.map 3.36 kB 0 [emitted] main
When I add the code below with custom externals, I can remove node_modules from directly including bundle.js in the output.
bundle.js 743 kB 0 [emitted] main bundle.js.map 864 kB 0 [emitted] main
This greatly reduces the size of the package. But in the browser I get an error: Uncaught ReferenceError: require is not defined in the browser. Does anyone know how to fix this problem?
var path = require("path"), fs = require("fs"); // return what in the node modules folder apart from ".bin" const nodeModules = fs .readdirSync("./node_modules") .filter(d => d != ".bin"); /** * Remove non-direct references to modules from bundles * * @param {any} context * @param {any} request * @param {any} callback * @returns */ function ignoreNodeModules(context, request, callback) { // IF someone is importing a module eg "import {chatModule} from // "./components/chat" using a relative path, then we're okay with them bringing // in into the bundle if (request[0] == ".") return callback(); // IF someone is doing "import {Subject} from "rxjs/Subject" only want to know // if first part is a node_module const module = request.split("/")[0]; if (nodeModules.indexOf(module) !== -1) { // append "commonjs " - tells webpack to go and grab from node_modules instead // of including in bundle return callback(null, "commonjs " + request); } return callback(); } module.exports = { entry: "./src/index.tsx", output: { filename: "bundle.js" }, devtool: "source-map", resolve: { extensions: ["", ".ts", ".tsx", ".js"] }, module: { loaders: [ { test: /\.ts(x?)$/, loader: "ts-loader" } ] }, // Runs our custom function everytime webpack sees a module externals: [ignoreNodeModules] }
source share