taro icon indicating copy to clipboard operation
taro copied to clipboard

config/index 无法引入 esm 模块([email protected] 无法编译)

Open NKnife opened this issue 10 months ago • 6 comments

相关平台

H5

浏览器版本: Chrome 版本 123.0.6312.107(正式版本) (arm64) 使用框架: React

复现步骤

// config/index.ts
import UnoCSS from '@unocss/webpack'

// ...
      webpackChain(chain) {
        chain.resolve.plugin('tsconfig-paths').use(TsconfigPathsPlugin)
        chain.plugin('unocss').use(UnoCSS())
      }
// ...

期望结果

正常编译

实际结果

👽 Taro v3.6.20

/app/node_modules/@unocss/webpack/dist/index.mjs:1
import process$1 from 'node:process';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at internalCompileFunction (node:internal/vm:77:18)
    at wrapSafe (node:internal/modules/cjs/loader:1288:20)
    at Module._compile (node:internal/modules/cjs/loader:1340:27)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Object.newLoader [as .mjs] (/app/node_modules/pirates/lib/index.js:121:7)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Function.Module._load (node:internal/modules/cjs/loader:1023:12)
    at Module.require (node:internal/modules/cjs/loader:1235:19)
    at require (node:internal/modules/helpers:176:18)
    at Object.<anonymous> 
找不到项目配置文件config/index,请确定当前目录是 Taro 项目根目录!

环境信息

👽 Taro v3.6.20


  Taro CLI 3.6.20 environment info:
    System:
      OS: Linux 6.5 Alpine Linux
      Shell: 1.36.1 - /bin/ash
    Binaries:
      Node: 20.11.1 - /tmp/yarn--1712737160173-0.7841347378422729/node
      Yarn: 1.22.19 - /tmp/yarn--1712737160173-0.7841347378422729/yarn
      npm: 10.2.4 - /usr/local/bin/npm
    npmPackages:
      @tarojs/cli: 3.6.20 => 3.6.20 
      @tarojs/components: 3.6.20 => 3.6.20 
      @tarojs/helper: 3.6.20 => 3.6.20 
      @tarojs/plugin-framework-react: 3.6.20 => 3.6.20 
      @tarojs/plugin-platform-alipay: 3.6.20 => 3.6.20 
      @tarojs/plugin-platform-h5: 3.6.20 => 3.6.20 
      @tarojs/plugin-platform-jd: 3.6.20 => 3.6.20 
      @tarojs/plugin-platform-qq: 3.6.20 => 3.6.20 
      @tarojs/plugin-platform-swan: 3.6.20 => 3.6.20 
      @tarojs/plugin-platform-tt: 3.6.20 => 3.6.20 
      @tarojs/plugin-platform-weapp: 3.6.20 => 3.6.20 
      @tarojs/react: 3.6.20 => 3.6.20 
      @tarojs/runtime: 3.6.20 => 3.6.20 
      @tarojs/shared: 3.6.20 => 3.6.20 
      @tarojs/taro: 3.6.20 => 3.6.20 
      @tarojs/taro-loader: 3.6.20 => 3.6.20 
      @tarojs/webpack5-runner: 3.6.20 => 3.6.20 
      babel-preset-taro: 3.6.20 => 3.6.20 
      eslint-config-taro: 3.6.20 => 3.6.20 

补充信息

UnoCSS v0.59.0 只有 ESM 模式

NKnife avatar Apr 10 '24 08:04 NKnife

尝试 weapp 也会有类似的问题,应该是 taro 内部解析配置文件不支持导致的,还没有细看源码

ModyQyW avatar Apr 11 '24 03:04 ModyQyW

遇到同样的问题,大佬们有解决方案吗,"unocss": "^0.59.4",Taro v3.6.28

jsyanyang avatar May 06 '24 09:05 jsyanyang

遇到同样的问题,大佬们有解决方案吗,"unocss": "^0.59.4",Taro v3.6.28

降版本,0.58.9及以下可以

hejinpingQAQ avatar May 11 '24 01:05 hejinpingQAQ

👽 Taro v4.0.0-beta.67

/node_modules/.pnpm/[email protected][email protected][email protected][email protected]_@[email protected][email protected]_sass@/node_modules/unocss/dist/vite.mjs:1
import VitePlugin__default from '@unocss/vite';
^^^^^^

SyntaxError: Cannot use import statement outside a module

Taro@4 也不行...

cloydlau avatar May 11 '24 08:05 cloydlau

简单试了一下,用 createSwcRegister 转换 Pure ESM 包( @unocss/* )可以跑起来:

内部用到 @swc/register ,在 require 的时候转换对应的代码。

import { defineConfig } from '@tarojs/cli'
import { createSwcRegister, getModuleDefaultExport } from '@tarojs/helper'

export default defineConfig(async () => {
  createSwcRegister({
    only: [(filePath: string) => filePath.includes('@unocss')]
  })
  // require() 或者 import() 都行
  const UnoCSS = getModuleDefaultExport(await import('@unocss/webpack'))
  return {
    projectName: 'taro-unocss',
    deviceRatio: {},
    sourceRoot: 'src',
    outputRoot: 'dist',
    framework: 'vue3',
    compiler: {
      type: 'webpack5',
      prebundle: {
        enable: false
      }
    },
    h5: {
      webpackChain(chain) {
        chain.plugin('unocss').use(UnoCSS())
      }
    }
  }
})

参考:

https://github.com/NervJS/taro/blob/80a6d56667068c9f7fdeb147c96f0cf168cb74fa/packages/taro-service/src/Config.ts#L54-L62

类似的方法还有 readConfig ,不过编译阶段没跑通。

https://github.com/NervJS/taro/blob/80a6d56667068c9f7fdeb147c96f0cf168cb74fa/packages/taro-helper/src/utils.ts#L656-L667

anyesu avatar May 15 '24 06:05 anyesu

降版本,用0.58.0可以

yarn add -D [email protected] @unocss/[email protected] [email protected]

dzhiqin avatar Jun 18 '24 07:06 dzhiqin