【问题标题】:Less module build failed in webpack after migrating from grunt从 grunt 迁移后,webpack 中的较少模块构建失败
【发布时间】:2017-11-03 09:38:37
【问题描述】:

我不知道如何将我的 less 文件编译为 css,然后将它们包含在我的构建文件夹中,而不会导致应用程序无法运行。尝试构建/运行应用程序会返回以下错误:

ERROR in ./content/styles/less/ts.less
Module build failed: 

@import "node_modules/bootstrap/less/mixins/buttons.less";
@import "node_modules/Font-awesome/less/font-awesome.less";
^
Can't resolve './node_modules/Font-awesome/less/font-awesome.less' in '/home/thinkpad/work/EPD.SPA/EpdSPA/content/styles/less'
      in /home/thinkpad/work/EPD.SPA/EpdSPA/content/styles/less/ts.less (line 4, column 0)
 @ multi ./content/styles/less/for.less ./content/styles/less/kladd.less ./content/styles/less/ts.less

澄清一下:这些文件已经被证明可以与 grunt 一起使用。 webpack 迁移触发了这些错误。 我正在使用来自here 的 webpack 配置示例。我的配置文件:

var webpack = require('webpack');
var globby = require('globby');
var path = require('path');

var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var CleanWebpackPlugin = require('clean-webpack-plugin');
var AssetsPlugin = require('assets-webpack-plugin');
var CopyWebpackPlugin = require('copy-webpack-plugin');

const extractLESS = new ExtractTextPlugin('stylesheets/[name]-two.css');
module.exports = {
    entry: {
        app: globby.sync(['./app/app.js','./app/app.run.js', './app/app.config.js', './app/**/*.js']),
        styles: globby.sync(['./content/styles/*.css']),
        lessStyles: globby.sync(['./content/styles/less/*.less']), 
        images: globby.sync(['./content/images/**/*.*']),
        vendor: [
            // removed to save space
        ]
    },
    output: {
        filename: './scripts/[name].bundle.js',
        path: path.join(__dirname, "public")
    },
    devServer: {
        port: 1384,
        contentBase: './public/'
    },

    // Enable sourcemaps for debugging webpack's output.
    devtool: 'source-map',

    module: {
        rules: [
            {    test: /\.less$/,
                 use: extractLESS.extract([ 'css-loader', 'less-loader' ])
            },
            {
                test: /\.html$/,
                loader: 'raw-loader',
                exclude: [/node_modules/]
            },
            {
                test: /\.css$/,
                loader: ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader' }),
            },
            {
                test: /\.(ico)$/,
                loader: "url-loader?name=./[name].[ext]",
                include: path.resolve(__dirname, "content", "images")
            },
            {
                test: /\.svg$/,
                loader: 'svg-loader'
            },
            {
                test: /\.(jpg|jpeg|gif|png|PNG|tiff|svg)$/,
                loader: 'file-loader?name=/[path]/[name].[ext]',
                include: path.resolve(__dirname, "content", "images"),
            },
            {
                test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                loader: 'url-loader?minetype=application/font-woff&name=./fonts/[name].[ext]'
            },
            {
                test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                loader: 'file-loader?name=./fonts/[name].[ext]'
            },
            {
                test: require.resolve('adal-angular/lib/adal'),
                loader: 'expose-loader?AuthenticationContext'
            },
            {
                test: /\.js$/,
                enforce: "pre",
                loader: 'source-map-loader'
            }
        ],
    },

    plugins: [
        new HtmlWebpackPlugin({
            template: './app/layout.html',
            filename: 'index.html'
        }),
        new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', filename: './scripts/vendor.bundle.js' }),
        new ExtractTextPlugin({ filename: './[name].bundle.css' }),
        /*
        new CleanWebpackPlugin(['./public'], {
            verbose: false
        }),
        */
        new AssetsPlugin({
            filename: 'webpack.assets.json',
            path: './public/scripts',
            prettyPrint: true
        }),
        new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery',
            'window.jQuery': 'jquery',
            'window.$': 'jquery',
            "window.AuthenticationContext": "AuthenticationContext",
            _: 'underscore'
        }),

        new CopyWebpackPlugin([
            {from: './app/**/*.html', to: './'}
        ]),
        extractLESS // including the less files here
    ],
    externals: [
        { xmlhttprequest: '{XMLHttpRequest:XMLHttpRequest}' }
    ]

}

这里可以看到less文件已经编译成css并包含在public(build)文件夹中。如果配置文件按预期执行,为什么会出现错误?

这里还显示所有文件也包含在浏览器的应用程序中。我检查了所有依赖项,它们都在运行最新版本。

【问题讨论】:

    标签: css webpack less


    【解决方案1】:

    less 文件中的导入路径不正确。这是工作参考:

    @import "~bootstrap/less/variables.less";
    @import "~bootstrap/less/mixins/buttons.less";
    @import "~font-awesome/less/font-awesome.less";
    

    【讨论】:

      【解决方案2】:

      我认为问题出在您的 font_awesome 路径上。

      尝试将import 更改为(font_awesome 而不是Font_awesome

       @import "node_modules/font-awesome/less/font-awesome.less";
      

      【讨论】:

        猜你喜欢
        • 2019-11-06
        • 2017-07-18
        • 2016-02-10
        • 1970-01-01
        • 2022-12-21
        • 2021-05-07
        • 1970-01-01
        • 2020-04-19
        • 2017-09-30
        相关资源
        最近更新 更多