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

时间:2015-08-09 22:30:26

标签: javascript less reactjs webpack

我似乎无法使用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;

项目结构

enter image description here

1 个答案:

答案 0 :(得分:10)

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

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

通常我只在生产模式下使用style-loader。在开发模式中,我只使用hot-module-replacement,因此我可以利用webpack,因此每次更改样式时我都不需要运行{test: /\.css/, loader: 'style-loader!css-loader'}, CLI(I知道我可以使用webpack-middleware,但我不想这样做。

One of my dev webpack configs

One of my prod webpack configs

修改 这是index.less文件的拼写错误。我在拉取请求时为你解决了这个问题:)

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

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

//= require underscore
//= requrie gmaps/google

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

然后,这就是我要做的事情,以便减少到最低限度来测试:

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