mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-09-21 21:30:47 +02:00
Add support for "browser" condition (e.g., as used by Webpack) by stubbing-away Node imports (fixes #1441).
This commit is contained in:
parent
65eeb4c8d9
commit
a009407088
6 changed files with 45 additions and 32 deletions
|
@ -1,12 +1,9 @@
|
|||
// @ts-check
|
||||
|
||||
import { createRequire } from "node:module";
|
||||
const require = createRequire(import.meta.url);
|
||||
import webpack from "webpack";
|
||||
import TerserPlugin from "terser-webpack-plugin";
|
||||
import { __dirname, importWithTypeJson } from "../test/esm-helpers.mjs";
|
||||
const libraryPackageJson = await importWithTypeJson(import.meta, "../package.json");
|
||||
const nodeModulePrefixRe = /^node:/u;
|
||||
|
||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||
function config(options) {
|
||||
|
@ -19,14 +16,6 @@ function config(options) {
|
|||
"markdown-it": "markdownit"
|
||||
},
|
||||
"mode": mode,
|
||||
"module": {
|
||||
"rules": [
|
||||
{
|
||||
"test": /\.[cm]?js$/,
|
||||
"exclude": /node_modules/
|
||||
}
|
||||
]
|
||||
},
|
||||
"name": name,
|
||||
"optimization": optimization,
|
||||
"output": {
|
||||
|
@ -38,25 +27,10 @@ function config(options) {
|
|||
"path": __dirname(import.meta)
|
||||
},
|
||||
"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,
|
||||
"module": require.resolve("./module-stub.cjs")
|
||||
}
|
||||
},
|
||||
"ignoreWarnings": [
|
||||
{
|
||||
"message": /(asset|entrypoint) size limit/
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// @ts-check
|
||||
|
||||
import * as nodeFs from "node:fs";
|
||||
import { createRequire } from "node:module";
|
||||
const dynamicRequire = createRequire(import.meta.url);
|
||||
import * as os from "node:os";
|
||||
import path from "node:path";
|
||||
// @ts-ignore
|
||||
import { fs as nodeFs, module, os, path } from "#node-imports";
|
||||
const dynamicRequire = module.createRequire(import.meta.url);
|
||||
import { initialize as cacheInitialize } from "./cache.mjs";
|
||||
import { version } from "./constants.mjs";
|
||||
import rules from "./rules.mjs";
|
||||
|
|
|
@ -3,6 +3,5 @@
|
|||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
// @ts-ignore
|
||||
"createRequire": () => require
|
||||
};
|
22
lib/node-imports-browser.mjs
Normal file
22
lib/node-imports-browser.mjs
Normal file
|
@ -0,0 +1,22 @@
|
|||
// @ts-check
|
||||
|
||||
const getError = () => new Error("Node APIs are not available in browser context.");
|
||||
const throwForSync = () => {
|
||||
throw getError();
|
||||
};
|
||||
|
||||
export const fs = {
|
||||
"access": (path, callback) => callback(getError()),
|
||||
"accessSync": throwForSync,
|
||||
"readFile": (path, options, callback) => callback(getError()),
|
||||
"readFileSync": throwForSync
|
||||
};
|
||||
|
||||
export { default as module } from "./node-imports-browser-module.cjs";
|
||||
|
||||
export const os = {};
|
||||
|
||||
export const path = {
|
||||
"dirname": throwForSync,
|
||||
"resolve": throwForSync
|
||||
};
|
14
lib/node-imports-node.mjs
Normal file
14
lib/node-imports-node.mjs
Normal file
|
@ -0,0 +1,14 @@
|
|||
// @ts-check
|
||||
|
||||
import { access, accessSync, readFile, readFileSync } from "node:fs";
|
||||
export const fs = { access, accessSync, readFile, readFileSync };
|
||||
|
||||
import { createRequire } from "node:module";
|
||||
export const module = { createRequire };
|
||||
|
||||
import { EOL, homedir } from "node:os";
|
||||
export const os = { EOL, homedir };
|
||||
|
||||
// eslint-disable-next-line unicorn/import-style
|
||||
import { dirname, resolve } from "node:path";
|
||||
export const path = { dirname, resolve };
|
|
@ -14,6 +14,12 @@
|
|||
"./style/prettier": "./style/prettier.json",
|
||||
"./style/relaxed": "./style/relaxed.json"
|
||||
},
|
||||
"imports": {
|
||||
"#node-imports": {
|
||||
"browser": "./lib/node-imports-browser.mjs",
|
||||
"default": "./lib/node-imports-node.mjs"
|
||||
}
|
||||
},
|
||||
"types": "./lib/types.d.mts",
|
||||
"author": "David Anson (https://dlaa.me/)",
|
||||
"license": "MIT",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue