在更少的时间内启用内联javascript

在更少的时间内启用内联javascript,javascript,npm,less,laravel-mix,Javascript,Npm,Less,Laravel Mix,我想在我的less文件中使用内联js,但我得到以下消息: 未启用内联JavaScript。在你的选项中设置了吗 如何启用该功能?我也遇到了同样的问题,我使用的网页加载程序较少,我需要在较少的加载程序配置中添加javascript选项: { test: /\.less$/, use: [{ loader: "style-loader" }, { loader: "css-loader"

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

未启用内联JavaScript。在你的选项中设置了吗


如何启用该功能?

我也遇到了同样的问题,我使用的网页加载程序较少,我需要在较少的加载程序配置中添加javascript选项:

{
        test: /\.less$/,
        use: [{
            loader: "style-loader"
        }, {
            loader: "css-loader"
        }, {
            loader: "less-loader",
            options: {
                javascriptEnabled: true
            }
        }]
}
我在less编译器的源代码中发现:

他们以这种方式解析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 loader)中使用“javascriptEnabled:true”来启用javascript。

我在使用最新版本的less时遇到了这个问题。然后我切换到2.7版本,并对其进行了修复。

出于安全考虑,内联JavaScript在默认情况下被禁用。现在的情况是,在线生成器有时允许配置较少的变量,然后直接进行解释

这很容易受到代码注入的影响,这意味着JavaScript可以直接注入到服务器上运行的样式表中

由于这个原因,内联JavaScript已经被弃用(在3.x中默认设置为false),而替换它的是
@plugin
语法和使用正确的JS插件。-(见:)


是的,您仍然可以将编译选项设置为
javascriptEnabled:true
,但这并不是样式表的最佳实践。通常,样式表中不应包含JS。最好使用插件。

对@matthew dean和@davide carpini所说的一切都是肯定的。。。但是,对于任何正在寻找无咕噜代码片段的人,您可以:

  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”
。。。您的里程数可能会有所不同

我也遇到了同样的问题,但在
vue cli 4
+
iVueUi
主题自定义中。也许有人有和我一样的麻烦。这就是解决方案:

在项目根目录下创建或使用现有的
vue.config.js
文件。并将此代码(或部分添加)添加到其中


但是请记住,出于安全原因,
js
在默认情况下是禁用的。因此,这将由您自己承担风险。

只需更新已接受的答案

从3.11.1开始,如果只使用
选项
,它将抛出:

ValidationError:无效的选项对象。减少了装载机的数量 使用与API不匹配的选项对象初始化 模式。 -选项具有未知属性“javascriptEnabled”。这些属性有效:对象{lessOptions?,prependData?, appendData?,sourceMap?,实现?}

在中,应该使用的不仅仅是
选项
,而是
lessOptions
,如下所示:

{
    test: /\.less$/,
    use: [{
        loader: "style-loader"
    }, {
        loader: "css-loader"
    }, {
        loader: "less-loader",
        options: {
          lessOptions: {
             javascriptEnabled: true
          }
        }
    }]
}
更新日期:2020年5月 对于
less loader
版本6.1.0^。 在“less loader”版本6.1.0^中,他们对加载程序进行了突破性的更改,如果您使用Ant Design(或其他less和JS加载程序)之类的东西,您通常会将javascriptEnabled:true标志添加到Web包配置中的“options”对象中

在版本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标志不在顶级options对象下,而是在lessOptions子对象下。这是从less loader版本6.1.0开始的最新更新标准。

如果您使用的是cli界面
lessc
,那么您只需要在最后使用
--js

lessc --js ./styles/theme.less ./styles/theme.css

我在Gulpless的4.0.0版本中也遇到了同样的问题,安装一个旧版本也解决了这个问题。谢谢。同样的,我切换到了gulp less 3.0.5,它对meThis有效。出于安全原因,meThis已被弃用。请参阅下面的其他答案以了解更多信息。确切地说,应该避免使用内联javascript,如果您无法轻松摆脱的第三方软件包仍然这样做,那么提供的解决方案实际上是有用的。
lessc --js ./styles/theme.less ./styles/theme.css