markdownlint/demo/webpack.config.js

108 lines
2.4 KiB
JavaScript

// @ts-check
"use strict";
const webpack = require("webpack");
const TerserPlugin = require("terser-webpack-plugin");
const nodeModulePrefixRe = /^node:/u;
function config(options) {
const { entry, filename, mode, optimization, packageJson } = options;
const { name, version, homepage, license } = packageJson;
return {
"devtool": false,
"entry": entry,
"externals": {
"markdown-it": "markdownit",
"markdownlint-micromark": "micromarkBrowser"
},
"mode": mode,
"module": {
"rules": [
{
"test": /\.[cm]?js$/,
"exclude": /node_modules/
}
]
},
"name": name,
"optimization": optimization,
"output": {
"filename": filename,
"library": {
"name": name.replace(/(-\w)/g, (m) => m.slice(1).toUpperCase()),
"type": "var"
},
"path": __dirname
},
"plugins": [
new webpack.NormalModuleReplacementPlugin(
nodeModulePrefixRe,
(resource) => {
const module = resource.request.replace(nodeModulePrefixRe, "");
resource.request = module;
}
),
new webpack.BannerPlugin({
"banner": `${name} ${version} ${homepage} @license ${license}`
})
],
"resolve": {
"fallback": {
"fs": false,
"os": false,
"path": false,
"util": false
}
}
};
}
const modeDevelopment = {
"mode": "development"
};
const modeProduction = {
"mode": "production",
"optimization": {
"minimizer": [
new TerserPlugin({
"extractComments": false,
"terserOptions": {
"compress": {
"passes": 2
}
}
})
]
}
};
const entryLibrary = {
"entry": "./markdownlint-exports.js",
"packageJson": require("../package.json")
};
// const entryHelpers = {
// "entry": "../helpers/helpers.js",
// "packageJson": require("../helpers/package.json")
// };
module.exports = [
config({
...entryLibrary,
...modeDevelopment,
"filename": "markdownlint-browser.js"
}),
config({
...entryLibrary,
...modeProduction,
"filename": "markdownlint-browser.min.js"
})
// config({
// ...entryHelpers,
// ...modeDevelopment,
// "filename": "markdownlint-rule-helpers-browser.js"
// }),
// config({
// ...entryHelpers,
// ...modeProduction,
// "filename": "markdownlint-rule-helpers-browser.min.js"
// })
];