1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/webpack.renderer.js

52 lines
1.6 KiB
JavaScript

// fixme: convert to typescript (support webpack types, reuse vars.ts)
const path = require("path");
module.exports = function (config, env) {
const {module, plugins} = config;
const {rules} = module;
// localization support
// https://lingui.js.org/guides/typescript.html
rules.push({
test: /\.po$/,
use: '@lingui/loader'
});
patchLoader(".tsx", "ts-loader", loader => {
loader.options = Object.assign({}, loader.options, {
compilerOptions: {
jsx: "preserve", // @lingui/babel-preset-react
target: "es2016", // @lingui/babel-preset-react
module: "esnext", // https://webpack.js.org/guides/code-splitting/#dynamic-imports
}
})
return ["babel-loader", loader]
});
// sass common vars file import
patchLoader(".scss", "sass-loader", loader => {
loader.options = Object.assign({}, loader.options, {
prependData: '@import "vars.scss";',
sassOptions: {
includePaths: [
path.resolve(__dirname, "components")
]
}
})
return loader;
});
function patchLoader(fileType, loaderName, updater) {
let rule = rules.find(rule => fileType.match(rule.test));
if (rule) {
let loaders = [rule.use].flat();
let index = loaders.findIndex(loader => loader === loaderName || loader.loader === loaderName);
let loader = typeof loaders[index] === "string" ? {loader: loaders[index]} : loaders[index];
loaders[index] = updater(loader);
rule.use = loaders.flat();
console.info(`Patched renderer's webpack loader "${loaderName}"`, loader);
}
}
return config;
}