NervJS / taro

开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.zone/
https://docs.taro.zone/
Other
35.4k stars 4.78k forks source link

pnpm workspace monorepo方式导出报错 You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file #15955

Open DreamPWJ opened 3 months ago

DreamPWJ commented 3 months ago

相关平台

微信小程序

小程序基础库: 3.4.7 使用框架: Vue 3

复现步骤

ModuleParseError: Module parse failed: Unexpected token (2:7) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders | export { Http } from './http/http'

export type { HttpParams } from './types/http-params' |

→ Watching... [2024/6/21 17:39:32]

node:internal/process/promises:289 triggerUncaughtException(err, true / fromPromise /); ^

[UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "[object Array]".] { code: 'ERR_UNHANDLED_REJECTION' }

期望结果

正常加载 并支持monorepo方式

实际结果

无法导出通用包功能

环境信息

👽 Taro v3.6.32

  Taro CLI 3.6.32 environment info:
    System:
      OS: Windows 11 10.0.22631
    Binaries:
      Node: 20.14.0 - D:\Program Files\nodejs\node.EXE
      Yarn: 1.22.19 - ~\AppData\Roaming\npm\yarn.CMD
      npm: 10.7.0 - D:\Program Files\nodejs\npm.CMD
    npmPackages:
      @tarojs/cli: 3.6.32 => 3.6.32 
      @tarojs/components: 3.6.32 => 3.6.32 
      @tarojs/helper: 3.6.32 => 3.6.32 
      @tarojs/plugin-framework-vue3: 3.6.32 => 3.6.32 
      @tarojs/plugin-platform-alipay: 3.6.32 => 3.6.32 
      @tarojs/plugin-platform-h5: 3.6.32 => 3.6.32 
      @tarojs/plugin-platform-jd: 3.6.32 => 3.6.32 
      @tarojs/plugin-platform-qq: 3.6.32 => 3.6.32 
      @tarojs/plugin-platform-swan: 3.6.32 => 3.6.32 
      @tarojs/plugin-platform-tt: 3.6.32 => 3.6.32 
      @tarojs/plugin-platform-weapp: 3.6.32 => 3.6.32 
      @tarojs/runtime: 3.6.32 => 3.6.32 
      @tarojs/shared: 3.6.32 => 3.6.32 
      @tarojs/taro: 3.6.32 => 3.6.32
      @tarojs/taro-loader: 3.6.32 => 3.6.32
      @tarojs/webpack5-runner: 3.6.32 => 3.6.32
      babel-preset-taro: 3.6.32 => 3.6.32
      eslint-config-taro: 3.6.32 => 3.6.32

补充信息

使用pnpm workspace方式

koppthe commented 3 months ago

有最小可复现 demo 吗

DreamPWJ commented 3 months ago

好了,没有tsx编译, 现在集成nutUI 报错 vue__WEBPACK_IMPORTED_MODULE_1__.normalizeClass, 按照官方文档上配置不行

DreamPWJ commented 3 months ago

image

DreamPWJ commented 3 months ago

已搞定, 依赖版本和webpack配置有问题, 最新taro默认模板就有问题

DreamPWJ commented 3 months ago

vue3 + nutui4模板没问题

DreamPWJ commented 3 months ago
compiler: {
  type: 'webpack5',
  prebundle: { enable: false, force: true }  
}  需要设置
Mudong-17 commented 2 months ago

设置了也没有效果,Taro React,微信小程序

compiler: {
  type: 'webpack5',
  prebundle: { enable: false, force: true }  
} 
Yang03 commented 2 months ago
compile: {
      include: [(modulePath) => /node_modules|monoRepo/.test(modulePath)],
    }

引用的monoRepo 也要加到编译里

zzhao8053 commented 2 months ago

修复了吗?

DreamPWJ commented 2 months ago

不加 compile也能用, 修复了 , 并且开源了 https://github.com/DreamPWJ/mini-monorepo

Yang03 commented 2 months ago

@DreamPWJ 讲下思路

chioio commented 2 months ago

Error in React:

Module parse failed: Unexpected token (5:19)
packages/ui/src/Button/index.tsx
File was processed with these loaders:
 * ../../node_modules/.pnpm/@pmmmwh+react-refresh-webpack-plugin@0.5.15_react-refresh@0.11.0_type-fest@2.19.0_webpack-dev_p3avfqcvlze6pv6ak4bart7uku/node_modules/@pmmmwh/react-refresh-webpack-plugin/loader/index.js
 * ../../node_modules/.pnpm/unplugin@1.11.0/node_modules/unplugin/dist/webpack/loaders/transform.js
You may need an additional loader to handle the result of these loaders.
| import { Text } from '@tarojs/components'
| 
> export const Button: React.FC = () => {
|   return UI BUTTON
| }

@DreamPWJ 我看了你上面的例子,react的你用tsc编译了,我这边的情况是我 lib 里用到了 unocss,如果要用 tsc 或 tsup 的话就需要先编译 unocss 再 tsc/tsup

chioio commented 2 months ago

Error in React:

Module parse failed: Unexpected token (5:19)
packages/ui/src/Button/index.tsx
File was processed with these loaders:
 * ../../node_modules/.pnpm/@pmmmwh+react-refresh-webpack-plugin@0.5.15_react-refresh@0.11.0_type-fest@2.19.0_webpack-dev_p3avfqcvlze6pv6ak4bart7uku/node_modules/@pmmmwh/react-refresh-webpack-plugin/loader/index.js
 * ../../node_modules/.pnpm/unplugin@1.11.0/node_modules/unplugin/dist/webpack/loaders/transform.js
You may need an additional loader to handle the result of these loaders.
| import { Text } from '@tarojs/components'
| 
> export const Button: React.FC = () => {
|   return UI BUTTON
| }

@DreamPWJ 我看了你上面的例子,react的你用tsc编译了,我这边的情况是我 lib 里用到了 unocss,如果要用 tsc 或 tsup 的话就需要先编译 unocss 再 tsc/tsup

我找到了个方法,在 config/index.ts 下配置 h5/mini 的 compile

  // ...
  compile: {
        include: [() => '@org/ui'],
  }
  // ...