Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

does not support import remote css as less in less files #775

Closed
RunningCoderLee opened this issue Jul 15, 2021 · 7 comments
Closed

does not support import remote css as less in less files #775

RunningCoderLee opened this issue Jul 15, 2021 · 7 comments

Comments

@RunningCoderLee
Copy link

Versions

  • dumi: 1.1.23
  • node: v14.15.4
  • npm: 6.14.11
  • OS: macOS Big Sur 11.2.3
  • Browser: Edge 91.0.864.67

Steps to reproduce

在组件的 less 样式文件里通过 @import 语法引入 web url 地址

@import (less) url('https://at.alicdn.com/t/font_2673961_hg2vb7cj7i.css');

.a {
  color: red;
}

What is Expected?

正确加载

What is actually happening?

启动时报错

image

@RunningCoderLee RunningCoderLee added the bug Something isn't working label Jul 15, 2021
@PeachScript
Copy link
Member

Less 用法问题请从搜索引擎或 StackOverflow 之类的社区找答案

@PeachScript PeachScript added invalid This doesn't seem right and removed bug Something isn't working labels Jul 16, 2021
@RunningCoderLee
Copy link
Author

RunningCoderLee commented Jul 16, 2021

这个不算是用法问题吧,我单纯使用 webpack 的 demo 项目去验证这个场景是没有问题的

发现一个解决方案

.umirc.ts 中用 chainWebpack 更改 umi 引入的 less-loader 是可以解决这个问题的

import { defineConfig } from 'dumi'
import path from 'path'

export default defineConfig({
  chainWebpack(memo, { env, webpack, createCSSRule }) {
    // 替换 umi 自带的 less-loader 以解决 less 文件中 import web url 报错的问题
    memo.module
      .rule('less')
      .oneOf('css')
      .use(
        path.resolve(
          __dirname,
          'node_modules/@umijs/bundler-webpack/node_modules/@umijs/deps/compiled/less-loader/cjs.js',
        ),
      )
      .loader(require.resolve('less-loader'))
      .tap((options) => ({
        lessOptions: options,
      }))
  },
})

是不是引入的 loader 有问题?

顺带一提,在还没有明确问题根本原因前,能不能先不关闭 issue 并添加无效标签?

@PeachScript

@PeachScript
Copy link
Member

@RunningCoderLee 可以看下这个:less/less.js#3188 (comment)

顺带一提,在还没有明确问题根本原因前,能不能先不关闭 issue 并添加无效标签?

抱歉让你不适,我理解上面的 issue 很容易被搜索到所以直接关了,下次我把信息补齐再关

@RunningCoderLee
Copy link
Author

感谢你提供的链接,我去看了,但我感觉和我这个问题并不是完全等同,我这里就是要通过标记为 less 的形式来引用一个远端的 css 文件 url, 这样 less 会自动获取远端内容并打包到项目里

正常情况下,less 内置的 url-file-manager 会去正确处理 web url,但是我发的报错截图里明显是在解析地址的时候出错了,变成了 ./http... 这样的形式

所以我猜测可能是 less loader 这里出了问题,正好我看到 umi 里面用了编译后的 less loader 代码,在我尝试替换了 less loader后我的问题得到了解决,所以我觉得可能是 umi 里使用的 less loader 有问题, 到目前为止我依然坚持觉得这不是一个使用错误的问题

@PeachScript
Copy link
Member

@RunningCoderLee 理解了,Umi 自带的 less-loader 是锁到 5.0 的,背后是 3.x 的 Less.js,你使用的这个功能应该是 Less.js 4.0 出来的,所以要使用这个特性只能覆盖默认的 less-loader

@PeachScript PeachScript removed the invalid This doesn't seem right label Jul 16, 2021
@PeachScript PeachScript changed the title bug: 组件的 less 样式文件中如果用 import 语法引入web url 会报解析错误 dumi dev 无法处理组件源码中 Less.js 4.x 的用法 Jul 16, 2021
@PeachScript
Copy link
Member

看了下 less@3.13.1 已经有这个特性了,具体没生效的原因还需要再排查看看,refer: https://unpkg.com/browse/less@3.13.1/lib/less-node/url-file-manager.js

@PeachScript PeachScript reopened this Jul 16, 2021
@PeachScript PeachScript changed the title dumi dev 无法处理组件源码中 Less.js 4.x 的用法 does not support import remote css as less in less files Aug 10, 2021
@PeachScript
Copy link
Member

PeachScript commented Aug 10, 2021

虽然 Less.js 3.x 在编译器层面是支持远程文件的,但 less-loader@6 才能使用引入远程 Less/CSS 编译的特性,Umi 内置 less-loader@5,故无法支持该用法,可参考 webpack-contrib/less-loader#333less-loader#CHANGELOG

替换内置的 less-loader 是正解,issue 关闭

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants