webpack - 在 webpack 中使用文件加载器导入更少的文件

标签 webpack webpack-file-loader

我想使用文件加载器生成版本化的较少文件导入

<link rel="stylesheet/less" type="text/css" href="/static/styles.<VERSION/HASH>.less" />

我希望我可以
import '@/assets/styles.less'

main.js .

我只需要这个来进行版本控制(每次修改我的 styles.less 文件时自动重命名文件),我不想在编译时编译得更少,因为我使用的是 less.modifyVars在运行时。所以我正在使用
import '@/assets/less.min.js'

搜索 rel="stylesheet/less"标记并编译它。
当我在 index.html 中手动添加时
<link rel="stylesheet/less" type="text/css" href="/static/styles.less" />

一切正常,但我需要版本控制以实现持续交付

我尝试的是向加载器添加下一条规则:
{
    test: /\.less$/,
    loader: 'file-loader',
},

但是在编译期间我得到:
ERROR  Failed to compile with 1 errors                                                                           13:05:04

This dependency was not found:

* @/assets/styles.less in ./src/main.js

To install it, you can run: npm install --save @/assets/styles.less

enter image description here

最佳答案

下面的配置可以按照您的意愿工作。您可以在 github 上找到此示例.

src/main.js :

import a from "@/assets/styles.less"

console.log(`You don't need to import less file here at all, only in index.ejs but if you need the reference, there you have it: ${a}`);

Assets /样式.less

  // Variables
@link-color:        #428bca; // sea blue
@link-color-hover:  darken(@link-color, 10%);

// Usage
a,
.link {
  color: @link-color;
}
a:hover {
  color: @link-color-hover;
}
.widget {
  color: #fa0;
  background: @link-color;
}

webpack.config.js :

const HtmlWebpackPlugin = require("html-webpack-plugin");
const path = require('path')
module.exports = {
  entry: ['./src/main.js'],
  plugins: [
    new HtmlWebpackPlugin({template: 'src/index.ejs'}),
  ],
  devtool: '#source-map',
  resolve: {
    extensions: ['.less', '.js'], // not require
    alias: {'@': path.resolve(__dirname, 'src')}
  },
  module: {
    rules: [
      {
        test: /\.less$/,
        loader: 'file-loader',
        options: {
          publicPath: '', // you can override this to put less output in different folder
          name: 'static/[name].[ext]?[sha512:hash:base64:6]' // I guess you want the filename to stay the same after it's modified
        }
      },
    ],
  },
};

src/index.ejs :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet/less" type="text/css" href="<%= require('@/assets/styles.less') %>" />
</head>
<body>
</body>
</html>

请注意,下面的异常告诉您找不到文件 @/assets/styles.less .请确保您指定了正确的路径,如果您使用别名而不是相对路径,则 webpack.config.js 中的别名正确。 .

ERROR Failed to compile with 1 errors
13:05:04

This dependency was not found:

  • @/assets/styles.less in ./src/main.js

To install it, you can run: npm install --save @/assets/styles.less

关于webpack - 在 webpack 中使用文件加载器导入更少的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50601958/

相关文章:

javascript - webpack val loader 导致异常

javascript - 使用 webpack 时未找到自定义 jQuery 扩展/插件

javascript - 网址加载器与文件加载器 Webpack

javascript - 你如何将 webpack file-loader 和 svg-inline-loader 用于 SVG?

reactjs - 如何同时使用 webpack "file-loader"和 "@svgr/webpack"(或 svg-inline-loader)

javascript - 当通过另一个 React 应用程序中的脚本标签导入时,作为 UMD 捆绑的 React 组件无法加载依赖项

node.js - npm 运行生产后,vendor.js 很大

javascript - Webpack 文件加载器将相同的 URL 注入(inject) HTML 和 CSS 文件

heroku - Webpacker 在manifest.json 中找不到application.js Heroku Production

javascript - 我应该在文件加载器中指定什么选项,以便开发服务器正确加载文件