2021-01-05 20:55:09 -08:00
|
|
|
// @ts-check
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
const webpack = require("webpack");
|
2022-08-20 16:24:53 -07:00
|
|
|
const TerserPlugin = require("terser-webpack-plugin");
|
2022-08-16 04:01:53 +00:00
|
|
|
const nodeModulePrefixRe = /^node:/u;
|
2021-01-05 20:55:09 -08:00
|
|
|
|
|
|
|
function config(options) {
|
2022-08-20 16:24:53 -07:00
|
|
|
const { entry, filename, mode, optimization, packageJson } = options;
|
2021-01-05 20:55:09 -08:00
|
|
|
const { name, version, homepage, license } = packageJson;
|
|
|
|
return {
|
|
|
|
"devtool": false,
|
|
|
|
"entry": entry,
|
|
|
|
"externals": {
|
2023-02-08 20:50:28 -08:00
|
|
|
"markdown-it": "markdownit",
|
|
|
|
"markdownlint-micromark": "micromarkBrowser"
|
2021-01-05 20:55:09 -08:00
|
|
|
},
|
|
|
|
"mode": mode,
|
2021-01-06 19:45:15 -08:00
|
|
|
"module": {
|
|
|
|
"rules": [
|
|
|
|
{
|
2023-01-17 04:19:40 +00:00
|
|
|
"test": /\.[cm]?js$/,
|
|
|
|
"exclude": /node_modules/,
|
|
|
|
"use": {
|
|
|
|
"loader": "babel-loader",
|
|
|
|
"options": {
|
|
|
|
"presets": [ "@babel/preset-env" ]
|
2021-01-06 19:45:15 -08:00
|
|
|
}
|
2023-01-17 04:19:40 +00:00
|
|
|
}
|
2021-01-06 19:45:15 -08:00
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
2021-01-05 20:55:09 -08:00
|
|
|
"name": name,
|
2022-08-20 16:24:53 -07:00
|
|
|
"optimization": optimization,
|
2021-01-05 20:55:09 -08:00
|
|
|
"output": {
|
|
|
|
"filename": filename,
|
2023-02-08 20:50:28 -08:00
|
|
|
"library": {
|
|
|
|
"name": name.replace(/(-\w)/g, (m) => m.slice(1).toUpperCase()),
|
|
|
|
"type": "var"
|
|
|
|
},
|
2021-01-05 20:55:09 -08:00
|
|
|
"path": __dirname
|
|
|
|
},
|
|
|
|
"plugins": [
|
2022-08-16 04:01:53 +00:00
|
|
|
new webpack.NormalModuleReplacementPlugin(
|
|
|
|
nodeModulePrefixRe,
|
|
|
|
(resource) => {
|
|
|
|
const module = resource.request.replace(nodeModulePrefixRe, "");
|
|
|
|
resource.request = module;
|
|
|
|
}
|
|
|
|
),
|
2021-01-05 20:55:09 -08:00
|
|
|
new webpack.BannerPlugin({
|
|
|
|
"banner": `${name} ${version} ${homepage} @license ${license}`
|
|
|
|
})
|
|
|
|
],
|
|
|
|
"resolve": {
|
|
|
|
"fallback": {
|
|
|
|
"fs": false,
|
2022-05-06 21:04:34 -07:00
|
|
|
"os": false,
|
2021-01-05 20:55:09 -08:00
|
|
|
"path": false,
|
|
|
|
"util": false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2022-08-20 16:24:53 -07:00
|
|
|
const modeDevelopment = {
|
|
|
|
"mode": "development"
|
|
|
|
};
|
|
|
|
const modeProduction = {
|
|
|
|
"mode": "production",
|
|
|
|
"optimization": {
|
|
|
|
"minimizer": [
|
|
|
|
new TerserPlugin({
|
|
|
|
"extractComments": false,
|
|
|
|
"terserOptions": {
|
|
|
|
"compress": {
|
|
|
|
"passes": 2
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
]
|
|
|
|
}
|
|
|
|
};
|
|
|
|
const entryLibrary = {
|
2022-12-29 00:43:53 +00:00
|
|
|
"entry": "./markdownlint-exports.js",
|
2022-08-20 16:24:53 -07:00
|
|
|
"packageJson": require("../package.json")
|
|
|
|
};
|
2022-12-29 00:43:53 +00:00
|
|
|
// const entryHelpers = {
|
|
|
|
// "entry": "../helpers/helpers.js",
|
|
|
|
// "packageJson": require("../helpers/package.json")
|
|
|
|
// };
|
2021-01-05 20:55:09 -08:00
|
|
|
module.exports = [
|
|
|
|
config({
|
2022-08-20 16:24:53 -07:00
|
|
|
...entryLibrary,
|
|
|
|
...modeDevelopment,
|
|
|
|
"filename": "markdownlint-browser.js"
|
2021-01-05 20:55:09 -08:00
|
|
|
}),
|
|
|
|
config({
|
2022-08-20 16:24:53 -07:00
|
|
|
...entryLibrary,
|
|
|
|
...modeProduction,
|
|
|
|
"filename": "markdownlint-browser.min.js"
|
2021-01-05 20:55:09 -08:00
|
|
|
})
|
2022-12-29 00:43:53 +00:00
|
|
|
// config({
|
|
|
|
// ...entryHelpers,
|
|
|
|
// ...modeDevelopment,
|
|
|
|
// "filename": "markdownlint-rule-helpers-browser.js"
|
|
|
|
// }),
|
|
|
|
// config({
|
|
|
|
// ...entryHelpers,
|
|
|
|
// ...modeProduction,
|
|
|
|
// "filename": "markdownlint-rule-helpers-browser.min.js"
|
|
|
|
// })
|
2021-01-05 20:55:09 -08:00
|
|
|
];
|