【问题标题】:Cannot load LESS into page with webpack无法使用 webpack 将 LESS 加载到页面中
【发布时间】:2015-08-09 22:30:26
【问题描述】:

我似乎无法使用 webpack 将我的 LESS 加载到我的页面中

这是我的webpack.config.js

var webpack = require('webpack');
var ExtractTextPlugin = require("extract-text-webpack-plugin");

module.exports = {
    entry: [
        './app/index.js'
    ],
    output: {
        path: './public/js',
        filename: 'main.js'
    },
    devtool: 'source-map',
    module: {
        loaders: [
            { test: /\.json$/, loader: 'json-loader' },
            { test: /\.jsx$/, loader: 'jsx-loader' },
            { test: /\.es6$/, exclude: /node_modules/, loader: 'babel-loader?stage=0&optional=runtime'},
            { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader?stage=0&optional=runtime'},
            { test: /\.less$/, exclude: /node_modules/, loader: ExtractTextPlugin.extract("style-loader", "css-loader!less-loader") }
        ],
        plugins: [
            new ExtractTextPlugin('style.css', {
                allChunks: true
            })
        ]
    }
};

我的app/index.js 包含:

'use strict';

let stylesheet = require('./styles/index.less');
let routes = require('./routes.js');
let Router = require('react-router');
let { Handler } = Router;

Router.run(routes, Router.HistoryLocation, function(root, state) {
    React.render(<Handler query={ state } path={ state.pathname }/>, document.getElementById('app'))
});

var stylesheet 应该包含所有buttons.less,因为它包含@import "buttons.less";

这是我要加载的reactjs 组件:

var React = require('react');
var { RouteHandler } = require('react-router');

var UserMenu = React.createClass({

    render() {
        return (
            <div>
                <div id="login-btn">
                    <a href="/login">
                        <button type="button" className="btn btn-embossed btn-primary">Login</button>
                    </a>
                </div>
                <div id="signup-btn">
                    <a href="/signup">
                        <button type="button" className="btn btn-embossed btn-primary">Sign up</button>
                    </a>
                </div>
            </div>
        );
    }
})

var Layout = React.createClass({
    render() {
        console.log("layout props");
        console.log(this.props);
        return (
            <div id="review-web">
                <header className="header">
                    <UserMenu />
                </header>
                <div>
                    <RouteHandler path={ this.props.path } />
                </div>
            </div>
        )
    }
});

module.exports = Layout;

项目结构

【问题讨论】:

  • 你在运行 webpack 时会得到什么输出?
  • @Jordan 这是我的 package.json:dpaste.com/0VZTM2A 当我运行 webpack(npm start 或 npm run start)时,我没有收到任何错误。我的页面加载就像没有包含样式表一样
  • 好的,但是当你运行 webpack 时你会得到什么输出?
  • 另外,样式加载器应该将&lt;link ref="stylesheet" ...&gt;标签注入到你的文档中,你的浏览器应该下载它所引用的相应的.css文件。检查 DOM 以查看是否出现任何 &lt;link&gt; 标记,并查看“网络”选项卡以查看是否正在请求任何 .css 文件。
  • @Jordan 你去吧:dpaste.com/2QDZYQ5

标签: javascript less reactjs webpack


【解决方案1】:

除了将ExtractTextPlugin 的输出加载到 HTML 中之外,您似乎一切正常。

当您使用ExtractTextPlugin 时,webpack 会将css、less 捆绑在一个单独的bundle.css 文件中,您必须手动将其加载到您的应用程序中。 在您从控制台运行webpack CLI 后,您可以在webpackConfig.output.path 文件夹内的文件夹中找到此捆绑包。

通常我只在生产模式下使用ExtractTextPlugin。在开发模式下,我只是使用style-loader,所以我可以利用hot-module-replacement,所以我每次更改样式时都不需要运行webpack CLI(我知道我可以使用webpack-middleware ,但我不想)。

One of my dev webpack configs

One of my prod webpack configs

编辑 这是您的 index.less 文件上的拼写错误。我在拉取请求中为您解决了这个问题:)

编辑 2 好的,这是我的最后一次尝试:

尝试将此添加到您的 wepback 配置文件中:

{test: /\.css/, loader: 'style-loader!css-loader'},

也许,只是也许,LESS 加载器会输出一个也需要测试的临时 CSS 文件。不知道,我试试看。

然后,我会这样做,以便将测试减少到最低限度:

  • 停止在 index.less 中导入。我的意思是,将所有内容都放在 index.less 中,看看会发生什么。
  • 添加 CSS 测试后。尝试用常规 CSS 替换 LESS,看看是否可行。
  • 尝试在你的 webpack 配置中指定一个 publicPath:https://github.com/webpack/docs/wiki/configuration

【讨论】:

  • 我尝试{ test: /\.less$/, exclude: /node_modules/, loader: 'style-loader!css-loader!less-loader'} 排除ExtractTextPlugin 但仍然无法正常工作=/
  • 发生了什么?现在输出包应该能够注入您的样式。你遇到了什么错误?
  • 我没有看到任何错误,这就是为什么这对我来说很难调试 =/ 如果你有兴趣看,这是我的项目(它很小)github.com/liondancer/ReviewWeb/blob/master/webpack.config.js
  • 感谢您发现错字。看到之后,我在我现在所在的咖啡馆发出了奇怪的声音。我认为这可以解决问题,但在进行更改后没有解决=[
  • @Liondancer,该死的!我已经通过您可以采取的更多步骤更新了我的答案。如果这不能解决它。抱歉,我必须要走了。有时 JavaScript 会让我浪费时间或工作。 :(无论如何..当你找到答案时,请回去告诉我好吗?我会很好奇。好看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 2020-03-11
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多