如何用新插件替换 less-loader 中已弃用的 javascriptEnabled 选项
How to replace the deprecated javascriptEnabled option in less-loader with a new plugin
我需要为我的 less 文件使用内联 js,并且之前有一个 webpack 配置类似这样来启用内联 js:
module.exports = {
...
module: {
...
rules: [
...
{
test: /\.less$/,
use: [
{ loader: 'style-loader' },
{ loader: 'css-loader' },
{
loader: 'less-loader',
options: { javascriptEnabled: true },
},
],
},
],
},
};
但是 javascriptEnabled
选项已被弃用,替代方法是使用 @plugin
语法并使用 js 插件。但是,我对 docs 以及如何确切地实现插件以及应该在我的 webpack 配置中实现哪个插件来替换这个现在已弃用的选项感到有些困惑,这样我仍然可以使用内联 js。我该怎么做呢?谢谢
出于安全考虑,内联 javascript 已被弃用。它容易受到代码注入的攻击。因此强烈建议不要使用 inline javascript.
如果您真的非常想使用它,您可以使用 javascriptEnabled
被弃用之前的旧版本,但我认为这个答案太简单了。所以这是这个。
我做了一些研究,我猜你是从这个 中得到使用 plugins
的想法的。我的猜测是这里的作者并不是要用 webpack
插件替换 less-loader
中的 javascriptEnabled
来实现类似的内联编写方式 javascript。我猜他的意思是出于安全原因,每个内联 javascript 都应该重写为 less plugin
。
如果你这样想,docs 突然变得更有意义了。
您可以将内联 javascript 替换为不同的 Less plugins
,就像您提供的文档显示的那样:
// my-plugin.js
install: function(less, pluginManager, functions) {
functions.add('pi', function() {
return Math.PI;
});
}
// etc
如果您要在样式表中使用它:
@plugin "my-plugin";
.show-me-pi {
value: pi();
}
你会得到:
.show-me-pi {
value: 3.141592653589793;
}
这是 @Luze 的 modification/extension 方法,文档 here:
myPluginFile.js
:
const axios = require('axios').default
module.exports = {
install: function (less, pluginManager, functions) {
functions.add("blue", function () {
const headers = {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
timestamp: +new Date(),
}
try {
const method = 'get'
const url = 'https://myAPI.com/myFile.json'
const options = { headers: { ...headers } }
const { data } = await axios[method](url, {}, options)
return data
} catch (error) {
console.info('Error', { msg: error.message })
}
});
},
};
myStyleFile.less
:
@plugin "myPluginFile";
/* Style the body */
body {
color: blue();
}
我需要为我的 less 文件使用内联 js,并且之前有一个 webpack 配置类似这样来启用内联 js:
module.exports = {
...
module: {
...
rules: [
...
{
test: /\.less$/,
use: [
{ loader: 'style-loader' },
{ loader: 'css-loader' },
{
loader: 'less-loader',
options: { javascriptEnabled: true },
},
],
},
],
},
};
但是 javascriptEnabled
选项已被弃用,替代方法是使用 @plugin
语法并使用 js 插件。但是,我对 docs 以及如何确切地实现插件以及应该在我的 webpack 配置中实现哪个插件来替换这个现在已弃用的选项感到有些困惑,这样我仍然可以使用内联 js。我该怎么做呢?谢谢
出于安全考虑,内联 javascript 已被弃用。它容易受到代码注入的攻击。因此强烈建议不要使用 inline javascript.
如果您真的非常想使用它,您可以使用 javascriptEnabled
被弃用之前的旧版本,但我认为这个答案太简单了。所以这是这个。
我做了一些研究,我猜你是从这个 plugins
的想法的。我的猜测是这里的作者并不是要用 webpack
插件替换 less-loader
中的 javascriptEnabled
来实现类似的内联编写方式 javascript。我猜他的意思是出于安全原因,每个内联 javascript 都应该重写为 less plugin
。
如果你这样想,docs 突然变得更有意义了。
您可以将内联 javascript 替换为不同的 Less plugins
,就像您提供的文档显示的那样:
// my-plugin.js
install: function(less, pluginManager, functions) {
functions.add('pi', function() {
return Math.PI;
});
}
// etc
如果您要在样式表中使用它:
@plugin "my-plugin";
.show-me-pi {
value: pi();
}
你会得到:
.show-me-pi {
value: 3.141592653589793;
}
这是 @Luze 的 modification/extension 方法,文档 here:
myPluginFile.js
:
const axios = require('axios').default
module.exports = {
install: function (less, pluginManager, functions) {
functions.add("blue", function () {
const headers = {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
timestamp: +new Date(),
}
try {
const method = 'get'
const url = 'https://myAPI.com/myFile.json'
const options = { headers: { ...headers } }
const { data } = await axios[method](url, {}, options)
return data
} catch (error) {
console.info('Error', { msg: error.message })
}
});
},
};
myStyleFile.less
:
@plugin "myPluginFile";
/* Style the body */
body {
color: blue();
}