【发布时间】:2021-08-28 09:32:49
【问题描述】:
我有一个基于 typescript 的 React 项目,它依赖于另一个基于 typescript 的本地项目。我有这样的配置。
React 项目的 tsconfig.json:
"compilerOptions": {
"target": "esnext",
...
"experimentalDecorators": true,
"emitDecoratorMetadata": true
},
package.json:
"dependencies": {
...
"my-project": "file:../../Path/To/My/Project",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-scripts": "4.0.3",
"typescript": "^4.1.2",
"web-vitals": "^1.0.1"
},
如果我在 React 项目的 jsx 文件中使用装饰器就可以了:
import React from 'react';
import './App.css';
function deco(target:any){}
@deco // < This would be fine
class test{}
function App() {
return (
<div className="App">
<header className="App-header">
</header>
</div>
);
}
export default App;
但是,如果我使用装饰器从外部项目导入一个类,它会在构建时失败:
import React from 'react';
import './App.css';
// This would case a error when build
import * as mylib from 'my-project/foo_module'
function App() {
return (
<div className="App">
<header className="App-header">
</header>
</div>
);
}
export default App;
/Path/To/My/Project/foo_module.ts 3:0
Module parse failed: Unexpected character '@' (3:0)
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
| import {deco} from 'deco';
|
> @deco()
| export class foo_class
这似乎是 webpack 的一个问题,但我不知道如何在 Create-React-App 中处理这个问题。
【问题讨论】:
标签: reactjs typescript webpack create-react-app