Take control over the encoding of emitted webpack
assets.
This can be useful, if the delivering webserver enforces a specific content-type,
so that your code is not interpreted as utf-8 by the browser.
ℹ️ EncodingPlugin v2 only works with Webpack 5 and above. Use v1 for Webpack <= 4.
Install package:
$ yarn add --dev encoding-plugin
Add the plugin to your webpack
config. For example:
const EncodingPlugin = require('encoding-plugin');
module.exports = {
plugins: [
new EncodingPlugin({
encoding: 'iso-8859-1',
}),
],
};
Name | Type | Default | Description |
---|---|---|---|
encoding |
{String} |
undefined |
Target encoding |
test |
{String|RegExp|Array<String|RegExp>} |
/(.js|.css)(?.*)?$/i |
Include all assets that pass test assertion |
include |
{String|RegExp|Array<String|RegExp>} |
undefined |
Include all assets matching any of these conditions |
exclude |
{String|RegExp|Array<String|RegExp>} |
undefined |
Exclude all assets matching any of these conditions |
filename |
{String|Function} |
undefined |
The target asset filename |
patchWebpackBootstrap |
{Boolean} |
true |
Whether to replace utf-8 to target encoding from webpack runtime code or not |
Type: String
Default: undefined
The Plugin uses iconv-lite to handle the encoding. A list of supported encodings can be found here
webpack.config.js
module.exports = {
plugins: [
new EncodingPlugin({
encoding: 'iso-8859-1',
}),
],
};
Type: String|RegExp|Array<String|RegExp>
Default: /(\.js|\.css)(\?.*)?$/i
Include all assets that pass test assertion.
webpack.config.js
module.exports = {
plugins: [
new EncodingPlugin({
encoding: 'iso-8859-1',
test: /\.js(\?.*)?$/i,
}),
],
};
Type: String|RegExp|Array<String|RegExp>
Default: undefined
Include all assets matching any of these conditions.
webpack.config.js
module.exports = {
plugins: [
new EncodingPlugin({
encoding: 'iso-8859-1',
include: /\/includes/,
}),
],
};
Type: String|RegExp|Array<String|RegExp>
Default: undefined
Exclude all assets matching any of these conditions.
webpack.config.js
module.exports = {
plugins: [
new EncodingPlugin({
encoding: 'iso-8859-1',
exclude: /\/excludes/,
}),
],
};
Type: String|Function
Default: undefined
The target asset filename.
For example we have assets/scripts/main.js?foo=bar#hash
:
[path]
is replaced with the directories to the original asset, included trailing /
(assets/scripts/
).
[file]
is replaced with the path of original asset (assets/scripts/main.js
).
[base]
is replaced with the base ([name]
+ [ext]
) of the original asset (main.js
).
[name]
is replaced with the name of the original asset (main
).
[ext]
is replaced with the extension of the original asset, included .
(.js
).
[query]
is replaced with the query of the original asset, included ?
(?foo=bar
).
[fragment]
is replaced with the fragment (in the concept of URL it is called hash
) of the original asset (#hash
).
webpack.config.js
module.exports = {
plugins: [
new EncodingPlugin({
encoding: 'iso-8859-1',
filename: "[path][name].iso-8859-1[ext]",
}),
],
};
webpack.config.js
module.exports = {
plugins: [
new EncodingPlugin({
encoding: 'iso-8859-1',
filename(pathData) {
// The `pathData` argument contains all placeholders - `path`/`name`/`ext`/etc
// Available properties described above, for the `String` notation
if (/\.css$/.test(pathData.file)) {
return "assets/stylesheets/[path][name].iso-8859-1[ext]";
}
return "assets/scripts/[path][name].iso-8859-1[ext]";
},
}),
],
};
Type: Boolean
Default: true
Whether to replace utf-8
to target encoding from webpack
runtime code or not.
webpack.config.js
module.exports = {
plugins: [
new EncodingPlugin({
encoding: 'iso-8859-1',
patchWebpackBootstrap: true,
}),
],
};
Example Webpack runtime code:
patchWebpackBootstrap: false
/******/ script = document.createElement('script');
/******/ script.charset = 'utf-8';
/******/ script.timeout = 120;
patchWebpackBootstrap: true
/******/ script = document.createElement('script');
/******/ script.charset = 'iso-8859-1';
/******/ script.timeout = 120;
To use non-utf-8 encoding with webpack-dev-server, you must set the appropriate charset like so:
devServer: {
headers: {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/javascript; charset=windows-1251'
}
// ...
}
MIT