Bug 1855385 [wpt PR 42195] - [text-spacing-trim] Remove redundant copying of variants...
[gecko.git] / browser / components / newtab / webpack.system-addon.config.js
blob6cbe9e60cc83d876fd5e877bf0658423e2cc4d5e
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3  * You can obtain one at http://mozilla.org/MPL/2.0/. */
5 const path = require("path");
6 const webpack = require("webpack");
7 const { ResourceUriPlugin } = require("./tools/resourceUriPlugin");
9 const absolute = relPath => path.join(__dirname, relPath);
11 const resourcePathRegEx = /^resource:\/\/activity-stream\//;
13 module.exports = (env = {}) => ({
14   mode: "none",
15   entry: absolute("content-src/activity-stream.jsx"),
16   output: {
17     path: absolute("data/content"),
18     filename: "activity-stream.bundle.js",
19     library: "NewtabRenderUtils",
20   },
21   // TODO: switch to eval-source-map for faster builds. Requires CSP changes
22   devtool: env.development ? "inline-source-map" : false,
23   plugins: [
24     // The ResourceUriPlugin handles translating resource URIs in import
25     // statements in .mjs files, in a similar way to what babel-jsm-to-commonjs
26     // does for jsm files.
27     new ResourceUriPlugin({ resourcePathRegEx }),
28     new webpack.BannerPlugin(
29       `THIS FILE IS AUTO-GENERATED: ${path.basename(__filename)}`
30     ),
31     new webpack.optimize.ModuleConcatenationPlugin(),
32   ],
33   module: {
34     rules: [
35       {
36         test: /\.jsx?$/,
37         exclude: /node_modules\/(?!@fluent\/).*/,
38         loader: "babel-loader",
39         options: {
40           presets: ["@babel/preset-react"],
41           plugins: ["@babel/plugin-proposal-optional-chaining"],
42         },
43       },
44       {
45         test: /\.jsm$/,
46         exclude: /node_modules/,
47         loader: "babel-loader",
48         // Converts .jsm files into common-js modules
49         options: {
50           plugins: [
51             [
52               "./tools/babel-jsm-to-commonjs.js",
53               {
54                 basePath: resourcePathRegEx,
55                 removeOtherImports: true,
56                 replace: true,
57               },
58             ],
59           ],
60         },
61       },
62     ],
63   },
64   // This resolve config allows us to import with paths relative to the root directory, e.g. "lib/ActivityStream.jsm"
65   resolve: {
66     extensions: [".js", ".jsx"],
67     modules: ["node_modules", "."],
68     fallback: {
69       stream: require.resolve("stream-browserify"),
70     },
71   },
72   externals: {
73     "prop-types": "PropTypes",
74     react: "React",
75     "react-dom": "ReactDOM",
76     redux: "Redux",
77     "react-redux": "ReactRedux",
78     "react-transition-group": "ReactTransitionGroup",
79   },
80 });