Webpack 2 的语义 UI 问题

2024-04-24

一直在努力使用 Webpack 2 进行语义 ui 设置。我遇到了一些与默认语义 ui 主题中的字体相关的错误,以及另一个关于image-webpack-loader:

ERROR in ./~/css-loader?{"lessPlugins":[{"options":{"paths":{"../../theme.config":"/Users/djthomps/Desktop/demo/theme.config"}}}]}!./~/less-loader!./semantic/src/semantic.less
Module not found: Error: Can't resolve './themes/themes/default/assets/fonts/icons.eot' in '/Users/djthomps/Desktop/demo/semantic/src'
 @ ./~/css-loader?{"lessPlugins":[{"options":{"paths":{"../../theme.config":"/Users/djthomps/Desktop/demo/theme.config"}}}]}!./~/less-loader!./semantic/src/semantic.less 6:285117-285174 6:285197-285254
 @ ./semantic/src/semantic.less
 @ ./app/index.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./app/index.js

# same for icons.woff2

# same for icons.woff

# same for icons.ttf

# same for icons.svg

ERROR in ./~/css-loader?{"lessPlugins":[{"options":{"paths":{"../../theme.config":"/Users/djthomps/Desktop/demo/theme.config"}}}]}!./~/less-loader!./semantic/src/semantic.less
Module not found: Error: Can't resolve 'image-webpack' in '/Users/djthomps/Desktop/demo'
BREAKING CHANGE: It's no longer allowed to omit the '-loader' suffix when using loaders.
                 You need to specify 'image-webpack-loader' instead of 'image-webpack'.
 @ ./~/css-loader?{"lessPlugins":[{"options":{"paths":{"../../theme.config":"/Users/djthomps/Desktop/demo/theme.config"}}}]}!./~/less-loader!./semantic/src/semantic.less 6:218646-218697
 @ ./semantic/src/semantic.less
 @ ./app/index.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./app/index.js

最终目标是使用带有自定义主题的 React Semantic-ui 组件,我可以将其简单地导入到我的.jsx文件如所见这个例子 https://github.com/neekey/demo-semantic-ui-theming-with-webpack/blob/master/app/index.js.

我一直在关注本指南用于使用 Webpack 1 进行语义 UI 设置 https://github.com/neekey/demo-semantic-ui-theming-with-webpack使用 Webpack 2,修复少加载器 https://webpack.js.org/loaders/less-loader/一路走来的差异。尽管如此,在搜索其他项目后,我似乎无法解决这些问题,例如字体真棒-webpack2 https://www.npmjs.com/package/font-awesome-webpack2并筛选 github 评论。这是一个非常小的、可验证的例子:

webpack.config.js

const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const RewriteImportPlugin = require('less-plugin-rewrite-import');

const HtmlWebpackPluginConfig = new HtmlWebpackPlugin({
    template: './app/index.html',
    filename: 'index.html',
    inject: 'body' // inject scripts before closing body tag
});

module.exports = {
    entry: './app/index.js', // where the bundler starts the bundling process
    output: { // where the bundled code is saved
        path: path.resolve('dist'),
        filename: 'index_bundle.js'
    },
    module: {
        loaders: [
            {
                test: /\.(png|jpg|gif|woff|svg|eot|ttf|woff2)$/,
                loader: 'url-loader?limit=1024&name=[name]-[hash:8].[ext]!image-webpack'
            },
            {
                test: /\.less$/, // import css from 'foo.less';
                use: [
                    'style-loader',
                    {
                        loader: 'css-loader',
                        options: {
                            // importLoaders: 1,
                            lessPlugins: [
                                new RewriteImportPlugin({
                                    paths: {
                                        '../../theme.config':  __dirname + '/theme.config',
                                    },
                                })
                            ]
                        }
                    },
                    'less-loader'
                ]
            },
            {
                test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                loader: 'file-loader'
            }
        ]
    },
    devtool: 'eval-source-map',
    devServer: { compress: true },
    plugins: [ HtmlWebpackPluginConfig ]
};

package.json

{
    "name": "demo",
    "version": "1.0.0",
    "main": "index.js",
    "license": "MIT",
    "scripts": {
        "start": "webpack-dev-server"
    },
    "devDependencies": {
        "css-loader": "^0.26.1",
        "html-webpack-plugin": "^2.28.0",
        "image-webpack-loader": "^3.2.0",
        "less-loader": "^2.2.3",
        "less-plugin-rewrite-import": "^0.1.1",
        "semantic-ui": "^2.2.7",
        "style-loader": "^0.13.1",
        "url-loader": "^0.5.7",
        "webpack": "^2.2.1",
        "webpack-dev-server": "^2.3.0"
    }
}

app/index.js

import css from '../semantic/src/semantic.less';

app/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Demo</title>
</head>
<body>
    <button class="ui button">Follow</button>
</body>
</html>

theme.config

 // truncated for brevity
 @button     : 'gmail';

我的项目结构如下:

.
├── app
│   ├── index.html
│   └── index.js
├── package.json
├── semantic
│   ├── gulpfile.js
│   ├── src
│   └── tasks
├── semantic.json
├── theme.config
└── webpack.config.js

Update 1

我一直在考虑可能的解决方案:

  1. postinstall感动我的脚本theme.config进入semantic文件夹,然后构建semantic就像本教程 https://www.artembutusov.com/webpack-semantic-ui/
  2. postinstall脚本来替换所有theme.config使用我的版本导入(什么RewriteImportPlugin应该处理)
  3. 设置一个单独的 gulp 任务来处理文件的移动和语义 UI 的构建
  4. 端到端使用 webpack 2(首选)

Update 2

ERROR in ./~/css-loader?{"lessPlugins":[{"options":{"paths":{"../../theme.config":"/Users/djthomps/Desktop/demo/theme.config"}}}]}!./~/less-loader!./semantic/src/semantic.less
Module not found: Error: Can't resolve 'image-webpack' in '/Users/djthomps/Desktop/demo'
BREAKING CHANGE: It's no longer allowed to omit the '-loader' suffix when using loaders.
                 You need to specify 'image-webpack-loader' instead of 'image-webpack'.
 @ ./~/css-loader?{"lessPlugins":[{"options":{"paths":{"../../theme.config":"/Users/djthomps/Desktop/demo/theme.config"}}}]}!./~/less-loader!./semantic/src/semantic.less 6:218646-218697
 @ ./semantic/src/semantic.less
 @ ./app/index.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./app/index.js

通过调整配置文件修复:

 loader: 'url-loader?limit=1024&name=[name]-[hash:8].[ext]!image-webpack-loader' // note the loader at the end

折腾了三天,终于想明白了大半。

webpack.config.js

const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    entry: './app/index.js', // where the bundler starts the bundling process
    output: { // where the bundled code is saved
        path: path.resolve('dist'),
        filename: 'index_bundle.js'
    },
    resolve: {
        alias: {
            semantic: path.resolve(__dirname, 'semantic/src/'),
            jquery: path.resolve(__dirname, 'node_modules/jquery/src/jquery')
        }
    },
    module: {
        loaders: [
            {
                test: /\.(png|gif)$/,
                loader: 'url-loader?limit=1024&name=[name]-[hash:8].[ext]!image-webpack-loader'
            },
            {
                test: /\.jpg$/,
                loader: 'file-loader'
            },
            {
                test: /\.less$/, // import css from 'foo.less';
                use: [
                    'style-loader',
                    'css-loader',
                    'less-loader'
                ]
            },
            {
                test: /\.(ttf|eot|svg|woff2?)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                loader: 'file-loader'
            }
        ]
    },
    devtool: 'eval-source-map',
    devServer: { compress: true },
    plugins: [
        new HtmlWebpackPlugin({
            template: './app/index.html',
            filename: 'index.html',
            inject: 'body' // inject scripts before closing body tag
        }),
        new webpack.ProvidePlugin({
        $: 'jquery',
        jQuery: 'jquery',
        'window.jQuery': 'jquery'
    })
    ]
};

但问题是,如果您想使用捆绑字体,您需要修复路径,因为它们解析不正确after我们执行less-loaderloader(错误在哪里仍然是个谜)。我创建了一个方便的模板 https://github.com/atomicpages/semantic-ui-webpack2-boilerplate作为一个非常minimal带有一些附加细节的示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webpack 2 的语义 UI 问题 的相关文章

  • 如何访问 Chrome 的拼写检查词典?

    显然 Chrome 有一个内置字典 用于拼写检查 有 API 或某种方式来访问这本字典吗 我感兴趣的不是检查拼写 而是实际访问字典 例如 我想写Chrome 的词典自动完成扩展 https stackoverflow com questio
  • JSON 和 JavaScript 对象有什么区别? [复制]

    这个问题在这里已经有答案了 我对 JSON 和 JavaScript 对象很陌生 有人可以解释一下 JSON 和 JavaScript 对象之间的区别吗 它们的用途是什么 这个比那个好吗 还是要看情况而定 何时使用哪一个 在什么情况下使用
  • React Router V5 在路由中使用上下文变量的最佳方式

    在我的应用程序中 我定义了路线 如下所示
  • 如何使用 vue-toastification

    我刚刚将在 vue 3 中创建的项目迁移到 nuxt 3 以前我使用了 vue toastification 模块 但现在我不知道如何正确导入它 我的代码使用这个模块 import useToast POSITION from vue to
  • 未记录的 Sheet API 限制问题

    我已经看过人们遇到类似问题的帖子 但找不到明确的答案 我尝试使用以下代码行检索 264735 个插槽的二维数组 var optionalArguments majorDimension ROWS valueRenderOption FORM
  • 无法安装组件:模板或渲染函数未定义。组件导入失败

    我正在尝试复制 vue 教程示例 在这里找到 https v3 vuejs org guide component basics html passing data to child components with props https
  • 选择容器中的最后一个单词

    我只是想知道是否有办法选择 DIV 中的最后一个单词 我认为没有任何明显的方法可以做到这一点 那么有什么解决方法吗 我不介意使用 CSS 或 Javascript 来实现这一点 提前致谢 div or no div 它归结为基本的字符串操作
  • HTML5 - 创建画布视口

    我有一个 2D 数组 宽 30 下 20 然而 视口仅绘制横向 15 和向下 10 的内容 我最初有一个这样的游戏 我一直在努力实现这样的目标 这是我的小提琴 http jsfiddle net sTr7q http jsfiddle ne
  • 如何从图书馆创建承诺

    我对此感到困惑 因为到目前为止我发现的每个教程都假设我可以编辑库代码 或者库只有回调或回调作为最后一个参数 我正在使用的库的每个功能都设置为function successCallBack result FailCallBack error
  • Vue 3:“defineProps”引用本地声明的变量

    为什么我收到警告错误消息 defineProps引用本地声明的变量 eslint vue valid define props 当我在 props 中使用自定义验证器时SFC
  • 锁定 contenteditable="true" div 中的元素

    我有一个用于用户输入的 contenteditable div 当单击按钮时 它会显示替换某些单词的选项 首先 它删除所有 html 并创建可以替换单词的 span 元素 这些词的标记不同 我面临一些问题 当直接在跨度之前或之后单击并键入文
  • Twitter-Typeahead 不提供建议

    我正在尝试使用twitter typeahead rails 我的目的是当我在 Typeahead 输入框中键入内容时 通过下拉框建议模型 User 的实例 但是 当我打字时什么也没有发生 有人看到我的代码有什么问题吗 Gemfile ge
  • 检测“文件下载”弹出窗口何时关闭

    我有一个网页 用 JSF 制作 其中一些链接允许用户获取 PDF 文件 当用户点击这样的链接时 会显示一个等待弹出窗口 它是一个模式面板 因为 PDF 的生成可能很长 并且一旦创建文件 IE 就会显示 文件下载 弹出窗口 建议 打开 保存
  • 使用 JS 或 Jquery 禁用浏览器窗口中的声音

    有没有办法禁用可能嵌入视频的浏览器窗口上的所有声音 我不是在寻找特定的解决方案 例如使用 js 等定位 Youtube 我需要一些通用的东西来关闭该页面的所有声音 这样如果任何视频播放它就没有声音 需要一些在页面级别关闭声音的东西 而不是通
  • 为什么 JavaScript 原型属性在新对象上未定义?

    我对 JavaScript 原型概念还很陌生 考虑以下代码 var x function func x prototype log function console log 1 var b new x 据我了解 b log 应该返回 1 因
  • NestJs:如何使 Body 输入形状与实体的 DTO 不同?

    我的照片和标签对象有 DTO 如下所示 export class PhotoDto readonly title string readonly file string readonly tags TagDto export class T
  • 使用 javascript 在字符串中查找电子邮件地址

    我想做的是从字符串中提取电子邮件地址SomeName First email protected cdn cgi l email protection 这是我已经尝试过的代码 var stringToSearchIn SomeName Fi
  • 如何从 JavaScript 中的平面数据构建层次结构树?

    我有这样的 json 数据 Data Id 1 Name abc Parent Id 2 Name abc Parent 1 Id 3 Name abc Parent 2 Id 4 Name abc Parent 2 我想将这些数据转换为层
  • 使用 JavaScript 将图像上传到 Web 服务

    我需要从 javascript 将图像上传到网络服务 我必须发送一个 json 字符串和一个文件 图像 在java中我们有MultipartEntity 我在java中有以下代码 HttpPost post new HttpPost aWe
  • jQuery UI .buttonset() 太慢

    我的 HTML 页面上有几千个按钮 运行需要10多秒 buttonset buttonset 文件准备好 有没有更快的方法来做到这一点 或者是我以某种方式限制按钮数量的唯一解决方案 创建buttonset在第一次显示之前按需进行 我刚刚测试

随机推荐

  • 在枚举的构造函数中访问其他枚举

    我需要类似下面的东西 enum EE A anything B beta Z zulu ALL EE String s this s s EE String s for EE ee values PROBLEM HERE if ee ALL
  • 值到下一个千而不是最接近的千

    抱歉 我是java新手 目前我想将值编码为下一个千而不是最近的千 但我不知道该怎么做 我试过Math round但这是最圆的 请指导我 任何帮助将不胜感激 我寻找的预期输出 example 1 if the place values les
  • Swift 中获取和设置 UITextField 和 UITextView 的光标位置

    我一直在尝试UITextField以及如何使用它的光标位置 我找到了一些与 Objective C 相关的答案 如 ios中获取UITextField的光标位置 https stackoverflow com questions 16432
  • 一步连接带有分隔符的字符串列表元素[重复]

    这个问题在这里已经有答案了 是否有像 join 这样的函数将 List 的数据作为字符串返回 所有元素 由提供的分隔符连接 List
  • RODBC 无法分配内存

    简单的 R 脚本 library RODBC odbChannel lt odbcConnect dsn CTPRD03 uid BD RPT RO pwd df test lt sqlQuery channel odbChannel qu
  • 结构序列化

    有一些消息结构 每个都可以序列化为字符串并从字符串反序列化 对于序列化部分 我使用重载运算符 struct S int32 t type double a int32 t b bool c std string d friend std o
  • 使用 2.0 运行时启动 PowerShell ISE

    安装 PowerShell 3 0 后 我可以强制 PowerShell 开始使用版本 2 0 Version Starts the specified version of Windows PowerShell Enter a versi
  • 如何知道jar文件是否已经在运行?

    经过谷歌研究后 我找到了很好的答案 例如 1 using jps or jps l让 jars 在 JVM 下运行 这个答案可以 但是如果用户根本没有安装java并且我使用例如 bat文件和带有java JRE的文件夹运行我的jar 另外
  • update_attributes 未保存到数据库

    提交表单后 正确的自定义参数显示在我的调试函数中 但当我进入控制台时显示默认参数 控制器 def update current user update attributes params user flash success Your se
  • 如何在 RegionManager 中注册用户控件或控件模板内的区域?

    我在用IRegionManager要加载并导航到视图 我可以将内容加载到主视图中的主区域 该主视图加载了引导程序类 但我无法将内容加载到已加载视图内的区域 区域管理器似乎没有注册这些地区 我的引导程序类 protected override
  • 事务 1 已在 MongoDB 中提交

    我正在尝试使用事务来更新多个文档 一种是加载表单文档 await Sheet save session 另一个是库存预订记录数组 await Stock bulkWrite const session await mongoose star
  • 非调试模式下的 Django Whitenoise 500 服务器错误

    我在本地机器上使用 django 为了提供静态文件 我使用了 WhiteNoise 什么时候DEBUG True所有静态文件均已正确提供 但当我改变了DEBUG False并设置ALLOWED HOSTS 我收到 500 服务器错误 但是管
  • 应用程序日志保存在哪里? [复制]

    这个问题在这里已经有答案了 可能的重复 Windows 上应用程序日志文件的存储位置 https stackoverflow com questions 1572934 where to store an application log f
  • 拖放到文件输入在 IE11 中不起作用

    谁能回答我 为什么拖放字段在 chrome 和 firefox 中工作正常 但在 IE11 中不起作用 当我从桌面拖放文件时 IE11 只是打开文件 IE版本 11 545 10586 0 HTML
  • 是否可以使用 Rosyln 或 Resharper 来检测可能的 DivideByZero 情况?

    我正在尝试确定是否有一种编程方式来检查可能的情况DivideByZeroException在我的代码库中 我的代码库包含一系列相对简单到相对复杂的公式 大约有 1500 个 并且还在不断增加 编写新公式时 必须注意确保安全地进行除法 以避免
  • 如何在 C# 库中创建全局对象[重复]

    这个问题在这里已经有答案了 可能的重复 使整个应用程序可以访问数据 可能在运行时发生变化 的最佳方法是什么 https stackoverflow com questions 11781131 best way to make data t
  • 由于 bs4 与 BeautifulSoup 导致的导入错误

    我正在尝试使用beautifulsoup兼容的lxml它给了我一个错误 from lxml html soupparser import fromstring Traceback most recent call last File
  • Flutter 启动画面不适用于 launch_background.xml

    我似乎无法显示自己的启动屏幕 每次启动应用程序时 都会显示默认的空白启动屏幕 即使我已在其中设置了所有内容launch background xml和其他文件res 我还设置了所有相关的图标drawable and mipmap 启动背景
  • 将图像保存在 watir-webdriver 中

    我需要将图像从 recaptcha 保存到本地主机磁盘 我使用 watir webdriver 获取图像 dom 元素 但它不支持保存方法 如 watir 那样 那么如何将图像保存到我的磁盘上呢 网页 div style width 300
  • Webpack 2 的语义 UI 问题

    一直在努力使用 Webpack 2 进行语义 ui 设置 我遇到了一些与默认语义 ui 主题中的字体相关的错误 以及另一个关于image webpack loader ERROR in css loader lessPlugins opti