Vuejs 2.5+ Webpack 4+ 不加载 CSS 文件

Mic*_*ers 3 css webpack vue.js .net-core

目前我正在尝试设置一个启用了 webpack 4 的基本 Vue 项目。vue 框架基于 Microsoft SPA 模板 dotnet 核心。似乎一切都运行良好,除了外部 CSS 文件以某种方式没有加载到项目中,现在它困扰了我很长一段时间,问题是为什么这些 CSS 文件没有加载。

我基本上做的是“dotnet new vue”(您需要安装 Microsoft SPA 模板),在创建项目后,我开始更新包。目前我有以下 package.json 文件:

{
  "name": "Dashboard",
  "private": true,
  "version": "0.0.1",
  "scripts": {
    "build:development": "webpack"
  },
  "devDependencies": {
    "@types/webpack-env": "^1.13.6",
    "ajv": "^6.5.2",
    "aspnet-webpack": "^3.0.0",
    "awesome-typescript-loader": "^5.2.0",
    "bootstrap": "^4.1.1",
    "coa": "^2.0.1",
    "css-loader": "^1.0.0",
    "event-source-polyfill": "^0.0.12",
    "extract-text-webpack-plugin": "^4.0.0-beta.0",
    "file-loader": "^1.1.11",
    "isomorphic-fetch": "^2.2.1",
    "jquery": "^3.3.1",
    "mini-css-extract-plugin": "^0.4.1",
    "popper.js": "^1.14.3",
    "style-loader": "^0.21.0",
    "typescript": "^2.9.2",
    "url-loader": "^1.0.1",
    "vue": "^2.5.16",
    "vue-loader": "^15.2.4",
    "vue-property-decorator": "^7.0.0",
    "vue-router": "^3.0.1",
    "vue-style-loader": "^4.1.0",
    "vue-template-compiler": "^2.5.16",
    "webpack": "^4.16.0",
    "webpack-cli": "^3.0.8",
    "webpack-dev-middleware": "^3.1.3",
    "webpack-hot-middleware": "^2.22.2",
    "webpack-merge": "^4.1.3",
    "webpack-node-externals": "^1.7.2"
  },
  "dependencies": {}
}
Run Code Online (Sandbox Code Playgroud)

这是我的 webpack.config.file:

const path = require('path');
const webpack = require('webpack');
const CheckerPlugin = require('awesome-typescript-loader').CheckerPlugin;
const bundleOutputDir = './wwwroot/dist';
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
    mode: 'development',
    stats: {
        modules: false
    },
    context: __dirname,
    resolve: {
        extensions: [ '.js', '.ts' ]
    },
    entry: {
        'main': './ClientApp/boot.ts'
    },
    module: {
        rules: [
            {
                test: /\.vue\.html$/,
                include: /ClientApp/,
                loader: 'vue-loader',
                options: { loaders: { js: 'awesome-typescript-loader?silent=true' } }
            },
            {
                test: /\.ts$/,
                include: /ClientApp/,
                use: 'awesome-typescript-loader?silent=true'
            },
            { 
                test: /\.css$/,
                use: ['vue-style-loader', 'css-loader']
            },
            {
                test: /\.(png|jpg|jpeg|gif|svg)$/,
                use: 'url-loader?limit=25000'
            }
        ]
    },
    output: {
        path: path.join(__dirname, bundleOutputDir),
        filename: '[name].js',
        publicPath: 'dist/'
    },
    plugins: [
        new VueLoaderPlugin(),
        new CheckerPlugin(),
        new webpack.DefinePlugin({
            'process.env': {
                NODE_ENV: '"development"'
            }
        }),
        new webpack.DllReferencePlugin({
            context: __dirname,
            manifest: require('./wwwroot/dist/vendor-manifest.json')
        }),
        new webpack.SourceMapDevToolPlugin({
            filename: '[file].map',
            moduleFilenameTemplate: path.relative(bundleOutputDir, '[resourcePath]')
        })
    ]
};
Run Code Online (Sandbox Code Playgroud)

我通过以下方式包含了 CSS 文件:

在 app.ts 中(我添加它们只是为了测试):

import '../navmenu/navmenu.css';
require('../navmenu/navmenu.css');
Run Code Online (Sandbox Code Playgroud)

在 boot.ts

import './components/navmenu/navmenu.css';
require('./components/navmenu/navmenu.css');
Run Code Online (Sandbox Code Playgroud)

或者在原始文件(navmenu.vue.html)中(当一个默认的SPA骨架已经生成时):

<style src="./navmenu.css" />
Run Code Online (Sandbox Code Playgroud)

在所有这些位置,前端不包含/使用 css 文件。我还在 webpack.config 文件中尝试了不同的方法,例如使用 extract-text-webpack-plugin。

背后的基本思想是 Microsoft 的 SPA 模板正在使用 Webpack 2(以及其他不同包的旧版本),我正在尝试将它们更新到最新版本。

希望有人可以帮助我:-)

Mic*_*ers 6

我已经想通了。不知何故,webpack 4 并没有自行获取 CSS 文件。您需要先安装以下插件:

MiniCssExtractPlugin

之后在 webpack 配置中添加以下配置:

    { 
        test: /\.(s*)[a|c]ss$/,
        use: [
            "vue-style-loader",
            MiniCssExtractPlugin.loader,
            "css-loader",
            "sass-loader"
        ]
    }
Run Code Online (Sandbox Code Playgroud)

并将迷你 css 提取插件也添加到插件部分:

new MiniCssExtractPlugin({
    filename: "[name].css"
})
Run Code Online (Sandbox Code Playgroud)

你应该很高兴去!