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

[Bug]: Rspack does not rebuild when modifying pure type files #7957

Open
noshower opened this issue Sep 24, 2024 · 4 comments
Open

[Bug]: Rspack does not rebuild when modifying pure type files #7957

noshower opened this issue Sep 24, 2024 · 4 comments
Assignees
Labels
bug Something isn't working

Comments

@noshower
Copy link
Contributor

noshower commented Sep 24, 2024

System Info

  System:
    OS: macOS 14.5
    CPU: (16) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
    Memory: 125.49 MB / 32.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 20.12.0 - ~/.nvm/versions/node/v20.12.0/bin/node
    Yarn: 1.22.22 - ~/.nvm/versions/node/v20.12.0/bin/yarn
    npm: 10.5.0 - ~/.nvm/versions/node/v20.12.0/bin/npm
    pnpm: 9.5.0 - ~/.nvm/versions/node/v20.12.0/bin/pnpm
  Browsers:
    Chrome: 129.0.6668.59
    Safari: 17.5
  npmPackages:
    @rspack/cli: 0.7.5 => 0.7.5 
    @rspack/core: 0.7.5 => 0.7.5 
    @rspack/plugin-react-refresh: 0.7.5 => 0.7.5 

Details

修改纯类型的文件时,rspack 没有编译,导致 tsconfig-paths-webpack-plugin 插件反应。

Reproduce link

No response

Reproduce Steps

下面是可复现的demo:
rspack-project.zip

复现步骤

  1. 启动项目 npm run dev
  2. 启动完项目后修改 src/type.ts , 将 "Android" 删除, 保存文件

预期

终端中显示错误

ERROR in ./src/App.tsx:9:51
TS2345: Argument of type '"Android"' is not assignable to parameter of type 'AppType | (() => AppType)'.
     7 |   const [count, setCount] = useState(0);
     8 |
  >  9 |   const [appType, setAppType] = useState<AppType>("Android");
       |                                                   ^^^^^^^^^
    10 |
    11 |   console.log(appType, setAppType);
    12 |

Found 1 error in NaN ms.

实际

没有任何反应。

其他说明

在 0.5.6 版本中,不管是纯类型的 .d.ts 还是 .ts 文件,在保存文件后,都会触发类型检查。升级到 0.7.5 之后,纯类型文件,只会在首次启动时才参与类型检查,后面再修改,仿佛就没有修改似得。

另外我们从 webpack 迁移到 rspack ,项目架构没有变化,webpack 和 [email protected] 都是可以在文件修改后,触发类型检查。

期望,尽快修复这个问题,我们项目中每个组件都可能存在一个 type.ts(会被其他文件引用) 这样的纯类型文件和全局的 .d.ts(不会被其他文件引用,全局的) 文件。目前类型检查不工作,毕竟影响工作效率。

辛苦研发大哥们,早点修复。☕️

@noshower noshower added bug Something isn't working pending triage The issue/PR is currently untouched. labels Sep 24, 2024
@noshower
Copy link
Contributor Author

这个问题,在 1.0.x 中也是存在的

@chenjiahan chenjiahan changed the title [Bug]: 修改纯类型的文件时,rspack 没有反应 [Bug]: Rspack does not rebuild when modifying pure type files Sep 24, 2024
@noshower
Copy link
Contributor Author

嘿,这个问题什么时候安排修复

@jerrykingxyz jerrykingxyz self-assigned this Oct 21, 2024
@inottn
Copy link
Contributor

inottn commented Oct 21, 2024

You can try using this plugin code as a temporary fix for the issue.

class Plugin {
  apply(compiler) {
    compiler.hooks.afterCompile.tapPromise('delay', async () => {
      await new Promise((r) => {
        setTimeout(r, 10);
      });
    });
  }
}

@jerrykingxyz
Copy link
Collaborator

从提供的 demo 上看,因为 builtin:swc-loader 在转换代码时将 type.ts 的 import 给移除了导致 type.ts 没有被监听。目前可以直接把 type.ts 加入到 file_dependencies 中来解决。


From the provided demo, it seems that type.ts is not monitored because builtin:swc-loader removes the import of type.ts when converting the code. Currently, you can directly add type.ts to file_dependencies to solve this problem.

class MyPlugin {
    apply(compiler) {
        compiler.hooks.compilation.tap("MyPlugin", (compilation) => {
            compilation.fileDependencies.add(path.resolve(__dirname, "./src/type.ts"))
        })
    }
}

@jerrykingxyz jerrykingxyz removed the pending triage The issue/PR is currently untouched. label Oct 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants