NervJS / taro

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

ctx.modifyBuildTempFileContent 修改 component 的 config 编译失败 #7274

Open afishhhhh opened 4 years ago

afishhhhh commented 4 years ago

相关平台

微信小程序

小程序基础库: 2.7.3 使用框架: React

复现步骤

// component.jsx
config = {
  usingComponents: {
    'popup': '/components/vant/popup/index'
  }
}

// plugin.js
ctx.modifyBuildTempFileContent(({ tempFiles }) => {
  ...
  const { config } = tempFiles[filename]
  const { usingComponents } = config
  for (const [key, value] of Object.entries(usingComponents)) {
     usingComponents[key] = value.replace(/\/components\/vant/, '../../vant')
  }
  tempFiles[filename].config = {
    ...config,
    usingComponents
  }
})

按文档写的 modifyBuildTempFileContent 可以在编译过程中修改 config,所以我用上面的代码替换 usingComponents 的路径,从绝对路径替换为相对路径,最后编译的结果是编译失败,找不到 /components/vant/popup/index 这个文件,但是我在编译过程中替换成了相对路径,为什么还是编译失败呢,输出的 dist 其实是正确的,小程序也能运行

期望结果

编译成功

实际结果

编译失败

环境信息

Taro CLI 2.2.11 environment info:
    System:
      OS: macOS 10.14.6
      Shell: 5.3 - /bin/zsh
    Binaries:
      Node: 12.18.3 - ~/.nvm/versions/node/v12.18.3/bin/node
      npm: 6.14.6 - ~/.nvm/versions/node/v12.18.3/bin/npm
    npmPackages:
      @tarojs/components: 2.2.11 => 2.2.11 
      @tarojs/components-qa: 2.2.11 => 2.2.11 
      @tarojs/mini-runner: 2.2.11 => 2.2.11 
      @tarojs/plugin-sass: 2.2.11 => 2.2.11 
      @tarojs/plugin-uglify: 2.2.11 => 2.2.11 
      @tarojs/router: 2.2.11 => 2.2.11 
      @tarojs/taro: 2.2.11 => 2.2.11 
      @tarojs/taro-alipay: 2.2.11 => 2.2.11 
      @tarojs/taro-h5: 2.2.11 => 2.2.11 
      @tarojs/taro-qq: 2.2.11 => 2.2.11 
      @tarojs/taro-quickapp: 2.2.11 => 2.2.11 
      @tarojs/taro-rn: 2.2.11 => 2.2.11 
      @tarojs/taro-swan: 2.2.11 => 2.2.11 
      @tarojs/taro-tt: 2.2.11 => 2.2.11 
      @tarojs/taro-weapp: 2.2.11 => 2.2.11 
      @tarojs/webpack-runner: 2.2.11 => 2.2.11 
      eslint-config-taro: 2.2.11 => 2.2.11 
      eslint-plugin-taro: 2.2.11 => 2.2.11 
      nerv-devtools: ^1.5.7 => 1.5.7 
      nervjs: ^1.5.7 => 1.5.7 
      stylelint-config-taro-rn: 2.2.11 => 2.2.11 
      stylelint-taro-rn: 2.2.11 => 2.2.11 
      taro-ui: ^2.3.2 => 2.3.2 
fwh1990 commented 4 years ago

Taro@3.0.7 ctx.modifyBuildTempFileContent 是 undefined?

luckyadam commented 4 years ago

Taro@3.0.7 ctx.modifyBuildTempFileContent 是 undefined?

Taro 3 没有这个方法的

luckyadam commented 4 years ago

相关平台

微信小程序

小程序基础库: 2.7.3 使用框架: React

复现步骤

// component.jsx
config = {
  usingComponents: {
    'popup': '/components/vant/popup/index'
  }
}

// plugin.js
ctx.modifyBuildTempFileContent(({ tempFiles }) => {
  ...
  const { config } = tempFiles[filename]
  const { usingComponents } = config
  for (const [key, value] of Object.entries(usingComponents)) {
     usingComponents[key] = value.replace(/\/components\/vant/, '../../vant')
  }
  tempFiles[filename].config = {
    ...config,
    usingComponents
  }
})

按文档写的 modifyBuildTempFileContent 可以在编译过程中修改 config,所以我用上面的代码替换 usingComponents 的路径,从绝对路径替换为相对路径,最后编译的结果是编译失败,找不到 /components/vant/popup/index 这个文件,但是我在编译过程中替换成了相对路径,为什么还是编译失败呢,输出的 dist 其实是正确的,小程序也能运行

期望结果

编译成功

实际结果

编译失败

环境信息

Taro CLI 2.2.11 environment info:
    System:
      OS: macOS 10.14.6
      Shell: 5.3 - /bin/zsh
    Binaries:
      Node: 12.18.3 - ~/.nvm/versions/node/v12.18.3/bin/node
      npm: 6.14.6 - ~/.nvm/versions/node/v12.18.3/bin/npm
    npmPackages:
      @tarojs/components: 2.2.11 => 2.2.11 
      @tarojs/components-qa: 2.2.11 => 2.2.11 
      @tarojs/mini-runner: 2.2.11 => 2.2.11 
      @tarojs/plugin-sass: 2.2.11 => 2.2.11 
      @tarojs/plugin-uglify: 2.2.11 => 2.2.11 
      @tarojs/router: 2.2.11 => 2.2.11 
      @tarojs/taro: 2.2.11 => 2.2.11 
      @tarojs/taro-alipay: 2.2.11 => 2.2.11 
      @tarojs/taro-h5: 2.2.11 => 2.2.11 
      @tarojs/taro-qq: 2.2.11 => 2.2.11 
      @tarojs/taro-quickapp: 2.2.11 => 2.2.11 
      @tarojs/taro-rn: 2.2.11 => 2.2.11 
      @tarojs/taro-swan: 2.2.11 => 2.2.11 
      @tarojs/taro-tt: 2.2.11 => 2.2.11 
      @tarojs/taro-weapp: 2.2.11 => 2.2.11 
      @tarojs/webpack-runner: 2.2.11 => 2.2.11 
      eslint-config-taro: 2.2.11 => 2.2.11 
      eslint-plugin-taro: 2.2.11 => 2.2.11 
      nerv-devtools: ^1.5.7 => 1.5.7 
      nervjs: ^1.5.7 => 1.5.7 
      stylelint-config-taro-rn: 2.2.11 => 2.2.11 
      stylelint-taro-rn: 2.2.11 => 2.2.11 
      taro-ui: ^2.3.2 => 2.3.2 

是编译过程中,ctx.modifyBuildTempFileContent 方法替换配置处理的时机,是在用配置中路径去查找依赖组件之后,所以查找依赖组件时用的依然是绝对路径,所以报错了

fwh1990 commented 4 years ago

Taro@3.0.7 ctx.modifyBuildTempFileContent 是 undefined?

Taro 3 没有这个方法的

所以官方文档一直没人更新。。

fwh1990 commented 4 years ago

希望能加上去,毕竟3.0 也有 ctx.modifyBuildAssetsctx.modifyWebpackChain

afishhhhh commented 4 years ago

主要是 usingComponents 不能用绝对路径,如果可以我也不需要这样做了,原生是可以的 @luckyadam