无法使用webpack将LESS加载到页面中

Lio*_*cer 4 javascript less reactjs webpack

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

这是我的 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
            })
        ]
    }
};
Run Code Online (Sandbox Code Playgroud)

我的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'))
});
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

项目结构

在此输入图像描述

And*_*ena 10

除了将输出加载ExtractTextPlugin到HTML中之外,您似乎做得很好.

当您使用ExtractTextPlugin,它的WebPack将捆绑css,less在一个单独的bundle.css,你必须手动加载到你的应用程序文件.之后您运行webpack从您的CLI命令行,你可以期望找到这个包里面的文件夹中的webpackConfig.output.path文件夹中.

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

我的一个开发webpack配置

我的一个网络包配置

编辑 这是index.less 文件的拼写错误.我在拉取请求中为你修复了:)

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

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

{test: /\.css/, loader: 'style-loader!css-loader'},
Run Code Online (Sandbox Code Playgroud)

也许,只是可能,LESS加载器输出一个临时CSS文件,也需要进行测试.我不知道,我会尝试一下.

然后,这就是我要做的,为了减少测试的最小值:

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