javascript 如何正确地使基于 typescript 的Create React App面向ES3

2cmtqfgy  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(121)

我正在学习如何制作基于react的网页。
在我知道 typescript 可以转换到ES 3之后,ES 3基本上在所有浏览器上都支持。
我开始尝试制作一个简单的Hello World React应用程序,它将使用ES 3 JavaScript,我在虚拟机Win7的IE8上测试了它。
但问题是......也许没人会感到惊讶,它没有工作。

以下是我配置应用时采取的措施:

1.一开始我只修改了tsconfig.json的{“目标”:“es3”}

  • 结果是npm start上的一堆错误

1.所以我加了{“lib”:[...,“ES 5”,“ES6”] }(我一开始添加了更多的ES#,但不知何故它给出了更多的错误)

  • 并且开发服务器已成功启动
  • 但当我尝试在IE8中打开它时,它给出了一个错误,即无法识别=>,这是可以理解的

1.所以我开始寻找为什么JavaScript不能正确地传递到ES 3,并尝试返回{“目标”:“ES 5”},它也不应该支持箭头函数。

  • 但它们仍然存在于最终的代码中

1.所以我试着用npm run build来构建它

  • 这确实解决了这个问题,但代码现在包含了Symbol s,这在IE8上给出了错误。

1.所以我开始尝试随机操作,例如添加{ "downlevelIteration": true, "importHelpers": true }tsc .

  • 当然没有成功。

1.然后我在一个随机的网站上发现可以添加一个./src/tsconfig.json和一个./src/tsconfig.dev.json,所以我就配置了targetdownlevelIterationimporthelpers,并建立了网页。

  • 但它不起作用,同样的问题。

1.我开始变得焦躁不安,所以我导入了react-app-polyfillbabel-polyfill并进行了构建。

  • 这一次,虽然最终的JavaScript文件不包含Symbol,但它没有工作,因为一些愚蠢的错误,期望一些string在一些行如下:所以可以理解的是,我停止了我自己打电脑已经浪费了大约4/5天与这个有问题的目标。

1.经过“一些”搜索后我认为,该代码需要进行ES3ify编辑,因为我看到了被遗忘的行与ES3ify示例中给出的行之间的相似之处,在ES3ify示例中,类似的行被转换为"name-idont-remember" : function(){function i dont remember}

编辑:如果更容易,我也会使用VITE。

**因此,现在我所要求的只是某种指南/步骤列表,

每次我想制作ES 3 React-App时都会用到的。**

  • 如果你可以提供这种待办事项列表,或者你有链接到类似的东西,这是明确的,我会感激的善良行为,每次我阻止自己创造一个美丽的洞在我的电脑屏幕上

(我会非常感激的)

所以如果你能告诉我哪里做错了,或者更好,告诉我每一步都做错了什么,我也会很感激。

非常感谢大家/(我想现在人工智能也是)。

qyswt5oh

qyswt5oh1#

巴伯尔配置js:

模块.导出=函数(API){ const isProd = api.env('生产');

// ES3 configuration
const es3 = {
    presets: [
        [
            '@babel/preset-env',
            {
                modules: false,
                corejs: 3,
                
                debug: false /* set to true, to see the included polyfills, warning large output */
            }
        ]
    ],
    plugins: [
        'transform-es5-property-mutators',
        'transform-es2015-arrow-functions'
    ]
};

return {
    
    // other configurations possible
    env: {
        es3
    },
    presets: [],
    plugins: ['@babel/plugin-proposal-class-properties'],
    ignore: ['node_modules'],
    sourceMaps: true,
    compact: isProd
};

};

虚拟配置js:

plugins: [
            
            ...
            babel({
                babelHelpers: 'bundled',
                envName: 'es3'
            }),
            ...

到目前为止只在一个JavaScript项目中测试过。我仍然需要将所有内容转换为Typescript,然后才能肯定地说它将在那里工作。
我仍然需要验证完成的构建,但要到周五才能完成。Vite构建过程本身目前运行良好。
Eslint Compat也没有显示出它不兼容ES 3的问题。

相关问题