- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我检查其他线程已经好几天了;我在网上发现了几次相同的错误,但无法复制已发布的解决方案。为每个不同的版本编写 babel/webpack 配置的方法有很多种,这一事实并没有太大帮助。我正在运行 Webpack、TS 和 ESLint。我能够得到的“最佳情况”错误如下。我真的很想得到一些帮助! :[ 在很多事情中,我尝试过将 tsx 转换为 jsx,并使用 jsx preserve 而不是 react。
终端编译错误:
ERROR in ./src/index.tsx
Module build failed (from ./node_modules/babel-loader/lib/index.js):
SyntaxError: C:\Users\Milo\Desktop\Programacion\zekeapp\src\index.tsx: Unexpected token (12:2)
10 |
11 | ReactDOM.render(
> 12 | <Provider store={store}>
| ^
13 | <Router>
14 | <Main />
15 | </Router>
index.tsx
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { ThemeProvider } from 'styled-components';
import { BrowserRouter as Router, Route } from 'react-router-dom';
import store from './store';
import Main from './containers/Main';
import { lightTheme } from './templates/theme';
ReactDOM.render(
<Provider store={store}>
<Router>
<Main />
</Router>
</Provider>,
document.getElementById('root')
);
webpack.config.tsx
import * as path from 'path';
module.exports = {
entry: path.join(__dirname, './src/index.tsx'),
mode: 'production',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, './dist/scripts')
},
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx', '.json']
},
module: {
rules: [
{
test: /\.(js|jsx|tsx|ts)$/,
exclude: /node_modules/,
loader: 'babel-loader'
}
]
}
};
tsconfig.json
{
"compilerOptions": {
"target": "ES2018" /* Specify ECMAScript target version: "ES3" (default), "ES5", "ES2015", "ES2016", "ES2017", "ES2018", "ES2019" or "ESNEXT". */,
"module": "commonjs" /* Specify module code generation: "none", "commonjs", "amd", "system", "umd", "es2015", or "ESNext". */,
"jsx": "preserve" /* Specify JSX code generation: "preserve", "react-native", or "react". */,
"strict": true /* Enable all strict type-checking options. */,
"noImplicitAny": false /* Raise error on expressions and declarations with an implied "any" type. */,
"moduleResolution": "node" /* Specify module resolution strategy: "node" (Node.js) or "classic" (TypeScript pre-1.6). */,
"baseUrl": "./" /* Base directory to resolve non-absolute module names. */,
"paths": {
"#server/*": ["./server/*"],
"#src/*": ["./src/*"]
},
"experimentalDecorators": true /* Enables experimental support for ES7 decorators. */,
"emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */,
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
}
}
最佳答案
我按照官方 React & Webpack 得到了一个示例项目。文档。
进行这些更改:
将 webpack.config.tsx
重命名为 webpack.config.js
(它由节点而非 TypeScript 运行)
安装 ts-loader
以转译 .ts/.tsx 文件:npm install --save-dev ts-loader
编辑webpack.config.js
并配置ts-loader
这个例子也包括 babel-loader
。
注意 exclude:/node_modules/,
和 configFile: path.resolve('./tsconfig.json'),
行,它们很重要并且需要工作正确(有关详细信息,请参阅下面的故障排除部分)
// webpack.config.js
{
//...
module: {
rules: [
{
test: /\.(js|jsx|tsx|ts)$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
},
{
loader: 'ts-loader',
options: {
configFile: path.resolve('./tsconfig.json'),
},
},
],
}
]
}
}
tsconfig.json
并添加这些设置: // tsconfig.json
{
"compilerOptions": {
//...
// Can use to "react" if you aren't using `babel-loader` and `@babel/preset-react` to handle jsx
"jsx": "react" /* Specify JSX code generation: "preserve", "react-native", or "react". */,
// Include these so the `react` imports work nicely:
"esModuleInterop": true,
"allowSyntheticDefaultImports": true
}
}
npx webpack
$ npx webpack
Hash: 184cde71516bcbc08144
Version: webpack 4.41.5
Time: 2558ms
Built at: 01/13/2020 2:34:08 PM
Asset Size Chunks Chunk Names
bundle.js 128 KiB 0 [emitted] main
Entrypoint main = bundle.js
[2] ./src/index.tsx 498 bytes {0} [built]
[8] ./src/Main.tsx 385 bytes {0} [built]
+ 7 hidden modules
以下是我的测试项目的文件内容:
package.json
{
"devDependencies": {
"@babel/core": "^7.8.0",
"babel-loader": "^8.0.6",
"ts-loader": "^6.2.1",
"typescript": "^3.7.4",
"webpack": "^4.41.5",
"webpack-cli": "^3.3.10"
},
"dependencies": {
"@types/react": "^16.9.17",
"@types/react-dom": "^16.9.4",
"react": "^16.12.0",
"react-dom": "^16.12.0"
}
}
tsconfig.json
{
"compilerOptions": {
"target": "ES2018" /* Specify ECMAScript target version: "ES3" (default), "ES5", "ES2015", "ES2016", "ES2017", "ES2018", "ES2019" or "ESNEXT". */,
"module": "commonjs" /* Specify module code generation: "none", "commonjs", "amd", "system", "umd", "es2015", or "ESNext". */,
"strict": true /* Enable all strict type-checking options. */,
"noImplicitAny": false /* Raise error on expressions and declarations with an implied "any" type. */,
"moduleResolution": "node" /* Specify module resolution strategy: "node" (Node.js) or "classic" (TypeScript pre-1.6). */,
"baseUrl": "./" /* Base directory to resolve non-absolute module names. */,
"experimentalDecorators": true /* Enables experimental support for ES7 decorators. */,
"emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */,
"forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */
"jsx": "react" /* Specify JSX code generation: "preserve", "react-native", or "react". */,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true
}
}
webpack.config.json
const path = require('path');
module.exports = {
entry: path.join(__dirname, './src/index.tsx'),
mode: 'production',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, './dist/scripts')
},
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx', '.json']
},
module: {
rules: [
{
test: /\.(js|jsx|tsx|ts)$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
},
{
loader: 'ts-loader',
options: {
configFile: path.resolve('./tsconfig.json'),
},
},
],
}
]
}
};
src/index.tsx
import React from 'react';
import ReactDOM from 'react-dom';
import Main from './Main';
ReactDOM.render( <Main />, document.getElementById('root') );
src/Main.tsx
import React from 'react';
import ReactDOM from 'react-dom';
export default function Main(){
return (<h1>This is Main</h1>);
}
我在设置时遇到了这些问题 - 以下是我找到的解决方案。
错误:您收到如下错误:配置文件“tsconfig.json”中的"file"列表为空。
例如
ERROR in [tsl] ERROR
TS18002: The 'files' list in config file 'tsconfig.json' is empty.
ERROR in ./src/index.tsx
Module build failed (from ./node_modules/ts-loader/index.js):
Error: error while parsing tsconfig.json
解决方案:解析完整的tsconfig.json
路径
// webpack.config.js
{
loader: 'ts-loader',
options: {
// configFile: './tsconfig.json', // !! WRONG
configFile: path.resolve('./tsconfig.json'), // CORRECT
},
}
错误:您会收到如下错误:找不到模块:错误:无法解析“path-to-project/node_modules/react”中的“...”
例如
ERROR in ./node_modules/react/index.js
Module not found: Error: Can't resolve './Main' in 'C:\webpack-typescript\node_modules\react'
@ ./node_modules/react/index.js 15:31-48
@ ./src/index.tsx
解决方案:确保从 ts-loader
规则中排除 node_modules
。
// webpack.config.js
{
module: {
rules: [
{
test: /\.(js|jsx|tsx|ts)$/,
exclude: /node_modules/, // <--- make sure this is here!
// ...
}
]
}
}
关于javascript - 如何解决我的 TypeScript/ESLint/Webpack 转译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59709252/
在 ES6 中,我们可以使用 rest 参数,有效地创建一个参数数组。 TypeScript 使用 for 循环将其转换为 ES5。我想知道是否存在使用 for 循环方法比使用 Array.proto
鉴于以下情况: require('babel-core').transform('3').code 有没有办法让它返回3 (一个表达式)而不是 3; (一份声明)? 我试过了: 在网络和各种站点上搜索
这是我的计划。我想使用适用于 Windows 和 Mac 的 Typescript 构建应用程序。但是,由于我要将 Typeascript 代码转换为 Javascript 代码,所以我想尽可能实现一
是否有一个独立的转译器用于将 JSX 转换为 JavaScript(即只是 → createElement("foo", …) ,没有别的)? 我知道我可以只使用 Babel 和 Transform
我知道使用 babel 设置内联 javascript transpile // your es6 code 但是有没有可能将 es6 代码的字符串版本提供给 babel 并获得作为字
我想转译 ES6 中的几个 js 文件以与 chrome 兼容,但似乎 http://babeljs.io/docs/usage/cli/ 中的文档不准确。 完成前几个步骤后,我在控制台中输入:bab
我玩了一下 Babel 和 ES6,转译了一些代码,但我被困在这部分了: class App extends SomeParent { myFunction() { } } 我感兴趣的
我全新安装了 Next.js,并且希望能够使用 import 和 async/await 等。 我已经更新了我的 .babelrc { "plugins": [ [ "modu
我在 index.html 中有这个 SystemJS 配置: System.config({ defau
我正在开发一个网络应用程序,并将我的 Javascript 分成多个文件。我正在使用 Babel 将 ES2015 源文件目录转换为单个 ES5 文件。来自面向对象的背景,我喜欢拥有“类”,无论它们是
我对 Webpack 还很陌生,我只是想在这里启动一个简单的项目。我收到以下错误: ERROR in ./index.js Module parse failed: /Users/jay/Docume
我正在开发一个使用 es6 和 es7 代码的 Aurelia 应用程序,我正在尝试使用 babel 转译代码。我的 packages.json 文件中有以下内容 "scripts": { "
问题 当我使用npm run start运行nodemon时,我收到错误:找不到模块“Test”,以及当我使用npm run build构建文件时 并运行 ./dist/index.js,我得到同样的
由于 babel 没有正确转译代码,所有测试都失败了。 下面是来自控制台的错误。 Jest encountered an unexpected token This usually means t
我知道这样的事情不应该难倒我,但它确实难倒了我。 我正在学习如何使用 coffeescript 以及如何使用 Adobe Brackets 作为我的文本编辑器。那么如何在 Adobe Brac
TypeScript 在转译过程中检查整个代码库,即使实际上只有一个文件发生了变化。对于小型项目,这很好,但随着我们的代码库增长,这需要相当长的时间。 在开发过程中,我希望我的单元测试能够快速响应。单
我是第一次建立 TS 项目。我很好奇 - 我可以使用和配置 Babel 或者只是做 tsc .. 进行转译。 两者的主要区别是什么? 最佳答案 主要区别在于对 TypeScript 语言本身的支持。
对于我拥有的每个手动模拟,我都会收到来自 Jest 的警告,因为它同时找到了它的 .ts 和 .js 版本,并要求我删除一个,即: jest-haste-map: duplicate manual m
我是 babel 的新手,正在尝试转换我的 es6 代码以与 IE11 一起使用。但是当我在 IE11 中运行代码时,我收到关于我的 forEach 代码的 js 错误。根据我的阅读,我需要添加预设
尝试使用 mocha 对 ReactJS 应用程序进行单元测试,但在 node_modules 中使用的 es6 功能(导入/导出)中出现错误文件夹。有问题的应用程序是使用 babel 进行转译的,但
我是一名优秀的程序员,十分优秀!