【问题标题】:Enable inline javascript in LESS在 LESS 中启用内联 javascript
【发布时间】:2018-03-25 12:59:32
【问题描述】:

我想在我的 less 文件中使用内联 js,但我收到以下消息:

内联 JavaScript 未启用。是否在您的选项中设置?

我该如何启用它?

【问题讨论】:

    标签: javascript npm less laravel-mix


    【解决方案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】:

                当我使用cracocraco-less 并且还通过我的.less 文件自定义ant design 的变量时,像下面这样对craco.config.js 进行修正解决了我的问题:

                const CracoLessPlugin = require('craco-less')
                
                module.exports = {
                    plugins: [
                        {
                            plugin: CracoLessPlugin,
                            options: {
                                lessLoaderOptions: {
                                    lessOptions: {
                                        javascriptEnabled: true,
                                    },
                                },
                            },
                        },
                    ],
                }
                

                【讨论】:

                  猜你喜欢
                  • 2018-09-03
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-12-05
                  • 1970-01-01
                  • 2020-11-12
                  • 2014-08-31
                  • 2020-11-17
                  相关资源
                  最近更新 更多