当前位置: 首页 > 知识库问答 >
问题:

如何处理抖音小程序Mona框架中less-loader的模块构建失败问题?

颜云瀚
2024-07-16

抖音小程序Mona框架想要模块化引入less只能将less文件命名为xxx.module.less,但是我想让它可以直接使用xxx.less,所以就在mona.config.ts配置chain来修改 webpack配置,下面是我写的代码:
chain: (config) => {

config.module
  .rule('less')  
  .test(/\.less$/)  
  .use('style-loader')  
    .loader('style-loader')  
    .end()  
  .use('css-loader')  
    .loader('css-loader')  
    .options({
      importLoaders: 1,
      sourceMap: true, // 开启 CSS Modules  
    })  
    .end()
  .use('less-loader')  
    .loader('less-loader')
    .options({
      lessOptions: {
        javascriptEnabled: true,
      },
    })
    .end()

},
然后项目就报错了:
Module build failed (from ./node_modules/less-loader/dist/cjs.js):

// Imports
import CSS_LOADER_API_SOURCEMAP_IMPORT from "../../../node_modules/css-loader/dist/runtime/sourceMaps.js";

在网上搜索报错信息找了很多方法都没有解决,有大佬救救吗?

共有1个答案

贺恩
2024-07-16

在抖音小程序Mona框架中,修改webpack配置以支持.less文件作为CSS Modules使用时,通常你不需要手动在文件名后添加.module后缀,因为CSS Modules是通过webpack的配置选项来启用的,而不是通过文件名约定。

然而,从你提供的配置和错误信息来看,有几个潜在的问题需要解决:

  1. sourceMap配置位置:在css-loader选项中,sourceMap只是启用CSS源映射,它本身并不开启CSS Modules。CSS Modules是通过在loader配置中添加特定的查询参数(如modules: true)来启用的。
  2. modules配置:要启用CSS Modules,你需要在css-loaderoptions中添加modules: true
  3. style-loader与小程序:通常在小程序环境中,你不会使用style-loader,因为它主要用于将CSS注入到DOM中的<style>标签中,而小程序有其自己的样式系统。

基于以上分析,这里有一个修改后的webpack配置示例,它应该适用于抖音小程序Mona框架并启用CSS Modules:

chain: (config) => {
  config.module
    .rule('less')
    .test(/\.less$/)
    .use('css-loader')
      .loader('css-loader')
      .options({
        modules: true, // 启用CSS Modules
        importLoaders: 2, // 因为后面有less-loader,所以这里设置为2
        sourceMap: true, // 如果你需要源映射
      })
      .end()
    .use('less-loader')
      .loader('less-loader')
      .options({
        lessOptions: {
          javascriptEnabled: true,
        },
      })
      .end();

  // 注意:这里没有使用style-loader,因为小程序不需要它
  // ... 其他配置
},

注意,我已经移除了style-loader并更新了importLoaders的值为2,因为现在有css-loaderless-loader两个loader会处理CSS。

此外,请确保你的项目依赖中包含了css-loaderless-loader,并且它们的版本与你的项目兼容。

如果修改后仍然遇到问题,请检查以下几点:

  • 确保没有其他webpack规则与.less文件冲突。
  • 清除旧的构建缓存并重新构建项目。
  • 查看webpack的完整错误堆栈以获取更多关于失败原因的线索。
  • 查阅Mona框架的官方文档或社区论坛,看看是否有其他开发者遇到过类似的问题。
 类似资料:
  • 当我试着运行我的应用程序时,我遇到了这个错误,我使用的依赖项和我一直使用的一样,所以我对此感到非常困惑。 警告 进来/资产/css/风格。css 模块警告(来自./node_modules/postss loader/src/index.js): (13:3)开始值有混合支持,请考虑使用flex开始,而不是友好错误18:06:28@/资产/css/风格。css@。nuxt/App。js@。nuxt

  • 构建用户程序框架 接下来我们要做的工作,和实验准备中为操作系统「去除依赖」的工作十分类似:我们需要为用户程序提供一个类似的没有Rust std标准运行时依赖的极简运行时环境。这里我们会快速梳理一遍我们为用户程序进行的流程。 建立 crate 我们在 os 的旁边建立一个 user crate。此时,我们移除默认的 main.rs,而是在 src 目录下建立 lib 和 bin 子目录, 在 lib

  • 我有一个Jenkins/Maven/Git多模块项目,其中包含一个子模块(由承包商开发,没有什么可以改变它)。由于Git和子模块,我必须使用命令“Git Clone-recursive ssh://xxxxxxx.Git”在Linux中克隆repo。 这意味着我必须检查Jenkins Git插件选项“Advanced sub-modules Behavious”和“recursivy update

  • 1. 逻辑层 1.1注册小程序 App(Object) App() 函数用来注册一个小程序。接受一个 Object 参数, App() 必须在 app.js 中调用,且只能调用一次。​ Object参数说明 属性 类型 描述 触发时机 onLaunch Function 生命周期回调—监听小程序初始化 小程序初始化完成时触发(全局只触发一次) onShow Function 生命周期回调—监听小程

  • 问题内容: 尝试使用Webpack4和Babel7构建React应用时,我遇到以下错误。 ./src/index.js中的错误模块构建失败(来自./node_modules/babel-loader/lib/index.js):错误:无法从’/ Users / me / Desktop /找到模块’babel-preset-react’ reflask’-如果要解析“ react”,请使用“ mo

  • 失败:生成失败,出现异常。 出了什么问题:任务'执行失败:app: check DebugAarMetadata'。 发生多个任务操作失败:执行com时发生故障。Android建筑格雷德尔。内部的任务。CheckAarMetadataWorkAction > 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。运行--扫描以获得完整

  • 我正在阅读这个关于如何绑定Python和C的教程。我正在使用Python v3.7.1,所以我不得不使用新的Python接口(与示例不同),所以现在我有: 加法器。c 似乎一切都是正确的,我可以通过调用addList来运行Python代码。add()函数。但在构建模块时,我得到了以下输出(请注意,在出现此错误后,我可以很好地运行Python代码): $pythonsetup.py安装运行安装运行构

  • 随着互联网的飞速发展,前端开发越来越复杂,导致开发经常出现两个问题: 恼人的命名冲突 烦琐的文件依赖 针对这两个问题,可以使用js模块化技术来解决。当前主流的js模块化有两大规范CMD(Seajs)和AMD规范(RequireJS)。WeX5采用RequireJS(AMD规范)来实现,关于RequireJS的详细说明参考:http://www.requirejs.org/ 接下来我们介绍在WeX5