gpt4 book ai didi

javascript - 如何测试 babel 是否工作以及我的插件是否被执行

转载 作者:行者123 更新时间:2023-11-30 20:52:01 25 4
gpt4 key购买 nike

我正在使用 Next.js用于 React 应用程序的服务器端呈现(使用 styled-components )并且我使用 Babel 插件显示我在代码中使用的组件的名称。

这是我的 .babelrc文件:

{
"env": {
"development": {
"presets": ["next/babel"],
"plugins": [
[
"babel-plugin-styled-components",
{
"ssr": true,
"displayName": true,
"preprocess": false
}
]
]
},
"production": {
"presets": "next/babel",
"plugins": [
[
"babel-plugin-styled-components",
{
"displayName": false,
"ssr": true
}
]
]
},
"test": {
"presets": [
[
"env",
{
"modules": "commonjs"
}
],
"next/babel"
]
}
}
}

当我运行时 cross-env NODE_ENV=development concurrently "tsc --watch" next

我得到这些行 - 意思是 .babelrc在编译期间使用:

[1] > Using external babel configuration
[1] > Location: "...../.babelrc"
[1] > Using "webpack" config function defined in next.config.js.

但是一旦我转到开发工具并看到一些 styled-component我可以看到这个:class="sc-iyvyFf gGaJAt"但是在我的代码中我有这个定义:

const Title = styled.div`
font-size: 40px;
line-height: 1.13;
`

documentation example 看来- 我应该得到类似 ... <button class="Button-asdf123 asdf123" /> instead of just <button class="asdf123" />. 的东西但我没有。

深入了解后我发现了这个 issue ( https://github.com/styled-components/styled-components/issues/1103#issuecomment-324302997 ) 基于我在浏览器控制台中得到的错误:

It seems that only the server code is being transpiled and not the client code 😉

所以问题:如何测试babel是否正常工作以及.babelrc所有地方都在使用?

P.S. 在我的例子中,我在客户端获得的那些类有这个前缀 sc-我脑子里的意思styled-components .所以我不确定插件是否来自 .babelrc完全有效或有效,但我没有在样式化组件的声明中设置任何特殊属性,因此获得此通用前缀 sc-

更新这是我正在使用的自定义 next.conf.js

const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer')
const { ANALYZE } = process.env
const path = require('path')

module.exports = {
exportPathMap: function() {
return {
'/': { page: '/' }
}
},
webpack: function(config) {
if (ANALYZE) {
config.plugins.push(
new BundleAnalyzerPlugin({
analyzerMode: 'server',
analyzerPort: 8888,
openAnalyzer: true
})
)
}

config.resolve.alias = {
'styled-components': path.resolve('./node_modules/styled-components/')
}

return config
}
}

最佳答案

不幸的是,之前似乎没有人回答过这个问题;

您所看到的可能归结为您发布的这段代码:tsc --watch

如果您在 Babel 之前执行 TypeScript 转译并将其留给 TypeScript 转译为 ES5,它会转译所有标记的模板文字,而不会给我们的插件任何 Hook 。

因为您已经在使用 next.js,所以您不需要从头开始设置您的 Babel 管道。相反,您只需要在 TypeScript 中禁用这种类型的转译。

我建议您将 tsconfig.json 中的 target 设置为 ESNext,这样一切都交给 Babel。

https://www.typescriptlang.org/docs/handbook/compiler-options.html (参见“--target”)

关于javascript - 如何测试 babel 是否工作以及我的插件是否被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48076054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com