
Security News
TC39 Advances 11 Proposals for Math Precision, Binary APIs, and More
TC39 advances 11 JavaScript proposals, with two moving to Stage 4, bringing better math, binary APIs, and more features one step closer to the ECMAScript spec.
webpack-string-replacer
Advanced tools
Replace strings in webpack modules, with configurable apply-stage and match-count requirements.
Replace strings in webpack modules, with configurable apply-stage and match-count requirements.
npm install --save-dev webpack-string-replacer
Basic example:
const WebpackStringReplacer = require("webpack-string-replacer");
webpackConfig.plugins.push(new WebpackStringReplacer({
rules: [{
fileInclude: "targetFile.js",
replacements: [
{
pattern: "MY_API_TOKEN",
patternMatchCount: {min: 4},
replacement: "lPP5BxQESO6VU4aUcKJLFg",
},
],
}],
}));
Advanced example:
const WebpackStringReplacer = require("webpack-string-replacer");
webpackConfig.plugins.push(new WebpackStringReplacer({
logAroundPatternMatches: 200,
rules: [{
applyStage: "optimizeChunkAssets",
outputFileInclude: /\.js$/,
outputFileExclude: /vendors.js$/,
outputFileMatchCount: 6,
replacements: [
{
pattern: 'location.reload();',
patternMatchCount: {min: 4, max: 10},
replacement: '//location.reload();',
},
{
pattern: /location\.href = (.+);/g,
replacement: (match, sub1, offset, sourceStr)=> {
return (
`location.href_disabled = ${sub1};
Log("Redirect attempted to: " + location.href_disabled);`
);
},
},
],
}],
}));
If you prefer viewing the raw TypeScript typings, you can open the "Source/Options.ts" file, or the "Dist/*.d.ts" files.
shouldValidate
- bool | ({compilations: Compilation[]})=>boolIf set, the validations (eg. match-count requirements) will only be run when the condition is met (at the end of a compilation run).
validationLogType
- "error" | "logError" | "logWarning" | "log"What type of logging to use for validation failures, eg. match-count not being met. (error: throw new Error(...), the others: console.X(...))
ruleBase
- PartialIf set, each rule will "inherit" from the options specified here.
replacementBase
- PartialIf set, each replacement entry will "inherit" from the options specified here.
rules
- Rule[]Array of rules. (see below)
rules.X.applyStage
- "loader" | "optimizeModules" | "optimizeChunkAssets"loader (early)
Time: Applies before other loaders or plugins have modified the source files.
File basis: Replacements at this stage operate on the source-files, so include/exclude is based on source files (or chunk names), not the output files.
Example: Applies on original typescript source files, before typescript and babel have applied their transformations.
Compatibility: Using this mode prohibits use of the "outputFileInclude" and "outputFileExclude" props, since they can't be applied.optimizeModules (middle)
Time: Applies after loaders, but alongside some other plugins (depends on exact hooks used, and plugin order).
File basis: Replacements at this stage operate on partially modified files. Include/exclude is still based on source files (or chunk names) though, not the output files.
Example: For Babel, there seems to currently be a conflict where Babel has only "partially applied" on certain files, leading to text malformations. (eg. if modifying webpack/hot/dev-server.js)
Compatibility: Using this mode prohibits use of the "outputFileInclude" and "outputFileExclude" props, since they can't be applied.optimizeChunkAssets (late)
Time: Applies briefly before the output-files are actually emitted (eg. written to disk).
File basis: Replacements at this stage operate on the output-files, so include/exclude is based on output files (or chunk names), not the source files.
Example: Applies on the outputs of typescript and babel. (Chrome devtools, with sourcemaps disabled, can be used to help construct the replacements)
Compatibility: Using this mode prohibits use of the "fileInclude" and "fileExclude" props, since they can't be applied.
rules.X.chunkInclude
- bool | {name: string} - or array of theseIdentifies chunks to be included. (includes, then filters/excludes)
Examples: "main", "vendor"
Note: Chunk inclusion/exclusion might not work how you expect. Webpack seems to process chunks differently internally (eg. grouping them together more) than one would assume based on defined entry points and such. It's usually easier to use output-file inclusion/exclusion, as it has a clear output-file meaning/boundary.
rules.X.chunkExclude
- bool | {name: string} - or array of theseIdentifies chunks to be excluded. (includes, then filters/excludes)
rules.X.chunkMatchCount
- number | {min?: number, max?: number}Examples:
1
,{min: 3, max: 5}
rules.X.outputFileInclude
- bool | string | regex | function - or array of theseIdentifies output-files to be included. (includes, then filters/excludes)
Examples: "bundle.js", "vendorBundle.js"
rules.X.outputFileExclude
- bool | string | regex | function - or array of theseIdentifies output-files to be excluded. (includes, then filters/excludes)
Examples: "bundle.js", "vendorBundle.js"
rules.X.outputFileMatchCount
- number | {min?: number, max?: number}Checked against the number of output-file matches, in all (unignored) chunks. (condition must be met for at least one compilation)
Examples: (see rules.X.chunkMatchCount)
rules.X.fileInclude
- bool | string | regex | function - or array of theseIdentifies files to be included. (includes, then filters/excludes)
Examples:
true
,string to contain
,/regex to contain match for/
,str=>CustomMatchLogic(str)
rules.X.fileExclude
- bool | string | regex | function - or array of theseIdentifies files to be excluded. (includes, then filters/excludes)
Examples: (see rules.X.fileInclude)
rules.X.fileMatchCount
- number | {min?: number, max?: number}Checked against the number of file matches, in all (unignored) chunks. (condition must be met for at least one compilation)
Examples: (see rules.X.chunkMatchCount)
rules.X.logFileMatches
- boolIf true, files matches by rule will have their paths logged for inspection.
rules.X.logFileMatchContents
- bool | numberIf set, files matches by rule will have their contents logged for inspection. (if true: the whole file; if number: the first X characters)
rules.X.replacements
- Replacement[]Array of replacements. (see below)
rules.X.replacements.X.pattern
- stringExamples:
"string to match"
,/regex(p?) to match/g
rules.X.replacements.X.patternMatchCount
- number | {min?: number, max?: number}Checked against the number of pattern matches, in all (unignored) chunks/files within the compilation. (condition must be met for at least one compilation)
Examples: (see rules.X.chunkMatchCount)
logAroundPatternMatches
- numberIf set, locations where patterns are matched will have X characters of the source code (before and after) logged for inspection. (not yet compatible with
optimizeChunkAssets
)
rules.X.replacements.X.replacement
Examples:
"new value"
,matchedStr=>matchedStr + "new portion"
If this particular implementation of plugin-based string-replacement doesn't suit your needs, here's a list of alternatives:
Apply stage - loader:
Apply stage - unknown:
FAQs
Replace strings in webpack modules, with configurable apply-stage and match-count requirements.
The npm package webpack-string-replacer receives a total of 1,460 weekly downloads. As such, webpack-string-replacer popularity was classified as popular.
We found that webpack-string-replacer demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
TC39 advances 11 JavaScript proposals, with two moving to Stage 4, bringing better math, binary APIs, and more features one step closer to the ECMAScript spec.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.