async function runWebpack()

in gulpfile.js [150:241]


async function runWebpack({
  packages = [],
  devtool = false,
  compileInPlace = false,
  mode = process.argv.includes("watch") ? "development" : "production",
} = options) {
  let configs = [];
  for (const { entry, library, filename } of packages) {
    const config = {
      mode,
      target: "node",
      entry: path.resolve(entry),
      output: {
        path: compileInPlace
          ? path.resolve(path.dirname(entry))
          : path.resolve(distDir),
        filename: filename || path.basename(entry).replace(".js", ".bundle.js"),
        devtoolModuleFilenameTemplate: "../[resource-path]",
      },
      devtool: devtool,
      resolve: {
        extensions: [".js", ".ts", ".json"],
      },
      module: {
        rules: [
          {
            test: /\.ts$/,
            exclude: /node_modules/,
            use: [
              {
                // vscode-nls-dev loader:
                // * rewrite nls-calls
                loader: "vscode-nls-dev/lib/webpack-loader",
                options: {
                  base: path.join(__dirname),
                },
              },
              {
                // configure TypeScript loader:
                // * enable sources maps for end-to-end source maps
                loader: "ts-loader",
                options: {
                  compilerOptions: {
                    sourceMap: true,
                  },
                },
              },
            ],
          },
        ],
      },
      node: {
        __dirname: false,
        __filename: false,
      },
      externals: {
        vscode: "commonjs vscode",
        "cordova-simulate": "commonjs cordova-simulate",
      },
    };

    if (library) {
      config.output.libraryTarget = "commonjs2";
    }

    if (process.argv.includes("--analyze-size")) {
      config.plugins = [
        new (require("webpack-bundle-analyzer").BundleAnalyzerPlugin)({
          analyzerMode: "static",
          reportFilename: path.resolve(
            distSrcDir,
            path.basename(entry) + ".html"
          ),
        }),
      ];
    }

    configs.push(config);
  }

  await new Promise((resolve, reject) =>
    webpack(configs, (err, stats) => {
      if (err) {
        reject(err);
      } else if (stats.hasErrors()) {
        reject(stats);
      } else {
        resolve();
      }
    })
  );
}