在 LESS 中启用内联 javascript
Posted
技术标签:
【中文标题】在 LESS 中启用内联 javascript【英文标题】:Enable inline javascript in LESS 【发布时间】:2018-03-25 12:59:32 【问题描述】:我想在我的 less 文件中使用内联 js,但我收到以下消息:
内联 javascript 未启用。是否在您的选项中设置?
我该如何启用它?
【问题讨论】:
【参考方案1】:我也遇到了同样的问题,我使用 webpack 和 less loader,我需要在 less loader 配置中添加 javascript 选项:
test: /\.less$/,
use: [
loader: "style-loader"
,
loader: "css-loader"
,
loader: "less-loader",
options:
javascriptEnabled: true
]
在less编译器的源码中找到:https://github.com/less/less.js/blob/3.x/bin/lessc
他们以这种方式解析 js less 选项:
case 'js':
options.javascriptEnabled = true;
break;
case 'no-js':
console.error('The "--no-js" argument is deprecated, as inline JavaScript ' +
'is disabled by default. Use "--js" to enable inline JavaScript (not recommended).');
break;
因此,您可能应该在静态编译(命令行)中使用“--js”或在动态编译(如 webpack 加载器)中使用“javascriptEnabled: true”来启用 javascript。
【讨论】:
出于安全原因,此功能已被弃用。请参阅下面的其他答案以获取更多信息。 确切地说:应该避免使用 inline-javascript,如果您无法轻易摆脱的第 3 方包仍然这样做,那么所提供的解决方案实际上是有帮助的。【参考方案2】:我在使用最新版本的less时遇到了这个问题。然后我切换到 2.7 版本并修复了它。
【讨论】:
我在 gulp-less 的 4.0.0 版本中遇到了同样的问题,安装旧版本也解决了这个问题。谢谢。 同样,我切换到 gulp-less 3.0.5,它对我有用【参考方案3】:出于安全考虑,默认情况下禁用内联 JavaScript。发生的情况是,在线生成器有时会允许配置 Less 变量,然后直接解释。
这很容易受到代码注入的影响,这意味着可以将 JavaScript 注入到直接在服务器上运行的 Less 样式表中。
出于这个原因,内联 JavaScript 已被弃用(在 3.x 中默认设置为 false),取而代之的是 @plugin
语法并使用适当的 JS 插件。 - (见:http://lesscss.org/features/#plugin-atrules-feature)
是的,您仍然可以将编译选项设置为javascriptEnabled: true
,但这并不是样式表的最佳做法。通常,您的样式表中不应包含 JS。最好使用插件。
【讨论】:
【参考方案4】:对 @matthew-dean 和 @davide-carpini 所说的一切都是肯定的……但对于任何寻找 Grunt-LESS 代码 sn-p 的人来说:
less:
dev:
options:
paths: ['Content/less'],
plugins: [
new(require('less-plugin-autoprefix'))(
browsers: ['last 2 versions']
),
new(require('less-plugin-clean-css'))(
sourceMap: true,
advanced: true
)
],
relativeUrls: true,
javascriptEnabled: true
,
files:
'Content/less/site.css': 'Content/less/site.less'
,
这适用于我使用"grunt-contrib-less": "^2.0.0"
的实施...您的里程可能会有所不同
【讨论】:
【参考方案5】:我遇到了同样的问题,但在 vue-cli 4
+ iVueUi
主题定制中。也许有人和我有同样的烦恼。这就是解决方案:
在项目的根目录创建或使用现有的vue.config.js
文件。并将此代码(或部分添加)添加到其中。
module.exports =
css:
loaderOptions:
less:
javascriptEnabled: true
;
但请记住,出于安全原因,js
默认情况下是禁用的。所以这需要您自担风险。
【讨论】:
【参考方案6】:只是为了更新接受的答案,
从 3.11.1 开始,如果你只使用options
,它会抛出:
ValidationError:无效的选项对象。更少的装载机已经 使用与 API 不匹配的选项对象进行初始化 架构。 - 选项具有未知属性“javascriptEnabled”。这些属性是有效的:object lessOptions?, prependData?, appendData?,sourceMap?,实现?
在less@3.11.1中,不只是options
应该使用,而是lessOptions
这样:
test: /\.less$/,
use: [
loader: "style-loader"
,
loader: "css-loader"
,
loader: "less-loader",
options:
lessOptions:
javascriptEnabled: true
]
【讨论】:
【参考方案7】: 更新时间:2020 年 5 月对于less-loader
版本6.1.0^。
在“less-loader”版本 6.1.0^ 中,他们对加载器进行了重大更改,如果您使用 Ant Design(或其他 LESS 和 JS 加载器)之类的东西,您通常会将 javascriptEnabled: true 标志添加到“选项”对象在你的 Webpack 配置中。
在版本 6.1.0^ 中,此更改被放置在 less 加载器选项配置下的 lessOptions 对象中。这是我使用的解决方案,适用于我的 Webpack 配置包。
module: rules: [
test: /\.less$/,
use: [
loader: "style-loader" ,
loader: "css-loader" ,
loader: "less-loader",
options:
lessOptions:
javascriptEnabled: true,
]
]
请注意,javascriptEnabled 标志不在***选项对象下,而是在 lessOptions 子对象下。这是 less-loader 版本 6.1.0^ 的最新更新标准。
【讨论】:
【参考方案8】:如果您使用的是lessc
cli 界面,那么您只需要最后使用--js
。
lessc --js ./styles/theme.less ./styles/theme.css
【讨论】:
【参考方案9】:当我使用craco
和craco-less
并且还通过我的.less
文件自定义ant design
的变量时,像下面这样对craco.config.js
进行修正解决了我的问题:
const CracoLessPlugin = require('craco-less')
module.exports =
plugins: [
plugin: CracoLessPlugin,
options:
lessLoaderOptions:
lessOptions:
javascriptEnabled: true,
,
,
,
,
],
【讨论】:
以上是关于在 LESS 中启用内联 javascript的主要内容,如果未能解决你的问题,请参考以下文章
VS Code:启用内联拼写检查,但在“问题”面板中禁用拼写检查
php 如果在Genesis主题中启用了JavaScript,则添加一个小内联脚本以将`js`类附加到body标记