- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
PS:这是我第一次放弃在这里撰写第一个问题。如果有人可以提供帮助,我将非常感激。谢谢!
我正在尝试在相对较旧的 iPad 上的 iOS 10 Safari 中加载我的 ReactJS Web 应用程序(我使用 webpack 和 babel-loader,并使用 webpack-dev-server 提供服务)。
我收到以下语法错误:
语法错误:意外的标记“...”。需要一个属性名称。
(该页面在我迄今为止尝试过的所有设备/浏览器上都能正常加载。)
该错误是由这行转译代码引起的:
eval("\nconst publicIp = __webpack_require__(/*!public-ip */\"./node_modules/public-ip/browser.js\");\n\nconst isOnline = 异步选项 => {\n\t选项 = {\n\t\t超时:5000,\n\t\t版本:'v4',\n\t\t...选项\n\t};\n\n\ttry {\n\t\tawait publicIp[options.version](options);\n\t\treturn true;\n\t} catch (_) {\n\t\treturn false;\n\t}\n} ;\n\nmodule.exports = isOnline;\n//TODO:在下一个主要版本中删除此\nmodule.exports.default = isOnline;\n\n\n//# sourceURL=webpack:///./node_modules/is-online/browser.js?");
我们可以在源 https://github.com/sindresorhus/is-online/blob/master/browser.js 中观察到:
const isOnline = async options => {
options = {
timeout: 5000,
version: 'v4',
...options
};
// ...
};
在我看来,不支持使用 ...
扩展运算符进行对象解构。该代码来 self 正在使用的名为“is-online”的 npm 模块。
我尝试将“@babel/plugin-transform-destructuring”插件添加到 .babelrc
中,看看是否可以解决这个问题。所有内容都已编译,但这部分代码是相同的,因此仍然产生相同的错误。
我发现这个 Twitter 对话描述了同样的问题,而且也涉及 Safari,但他设法解决了这个问题,因为他“还需要为其激活转换插件:transform-object-rest-spread”:
https://twitter.com/beberlei/status/984083670012256258
所以我尝试了一下,但没有成功。
然后我在 .babelrc
中加强了我的插件游戏,并在网上搜索类似案例,尝试不同的配置,使用 npx babel-upgrade
更新 babel,删除并重新安装node_modules
并将插件直接放入 module.rules[0].options.plugins
我放弃了:
// .babelrc
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
],
"plugins": [
"@babel/plugin-transform-spread",
"@babel/plugin-transform-destructuring",
"@babel/plugin-transform-parameters",
"@babel/plugin-proposal-object-rest-spread",
]
}
...但它仍然给出错误。它还尝试将“@babel/plugin-transform-runtime”放在那里:相同。
我现在的 webpack 配置:
// webpack.dev.js
const path = require("path");
const webpack = require("webpack");
const TerserPlugin = require('terser-webpack-plugin');
module.exports = [
// App
{
mode: 'development',
entry: {
app: "./src/index.js"
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /(node_modules|bower_components)/,
loader: "babel-loader",
options: {
presets: ["@babel/env"],
}
},
{
test: /\.css$/,
use: ["style-loader", "css-loader", "postcss-loader"]
},
{
test: /\.(png|svg|jpg|gif)$/,
use: [
'file-loader'
]
}
]
},
resolve: { extensions: ["*", ".js", ".jsx"] },
output: {
filename: "app-v0.9.6.js",
path: path.resolve(__dirname, "public/dist/"),
publicPath: "/dist/"
},
plugins: [new webpack.HotModuleReplacementPlugin()],
devServer: {
host: '0.0.0.0',
disableHostCheck: true,
port: 80,
contentBase: path.join(__dirname, "public/"),
publicPath: "http://localhost:3000/dist/",
hotOnly: true
},
// Fixes Safari 10-11 bugs
// Has nothing to do with this question: already tried to comment this out
optimization: {
minimizer: [new TerserPlugin({
terserOptions: {
safari10: true,
},
})],
},
},
// Library
{
mode: 'development',
// ...
// another output that's exposed as a global variable (library)
}
];
以下是开发依赖项:
// package.json
...
"devDependencies": {
"@babel/cli": "^7.5.5",
"@babel/core": "^7.5.5",
"@babel/plugin-proposal-object-rest-spread": "^7.0.0",
"@babel/plugin-transform-destructuring": "^7.0.0",
"@babel/plugin-transform-parameters": "^7.0.0",
"@babel/plugin-transform-runtime": "^7.5.5",
"@babel/plugin-transform-spread": "^7.0.0",
"@babel/preset-env": "^7.0.0",
"@babel/preset-react": "^7.0.0",
"babel-loader": "^8.0.6",
"babel-preset-env": "^1.7.0",
"css-loader": "^3.2.0",
"file-loader": "^4.2.0",
"html-webpack-plugin": "^3.2.0",
"postcss-loader": "^3.0.0",
"style-loader": "^0.23.1",
"webpack": "^4.39.1",
"webpack-cli": "^3.3.6",
"webpack-dev-server": "^3.8.0",
"webpack-merge": "^4.2.1"
},
...
如果有人知道如何正确配置它,我将不胜感激。
最佳答案
正如您所理解的,您导入的模块中使用的“对象字面量中的 ES2018 扩展语法”(又名省略号)正在泄漏到您的转译包中,从而扰乱了最可怜的浏览器。发生这种情况的原因是:
Webpack 设置为忽略您的 node_modules,因此 is-online 不会被转译。
这是一个适合您的实用解决方案 - 修改 webpack.config.js
的 exclude
规则,如下所示:
exclude: /(node_modules\/(?!is-online)|bower_components)/,
又名。 “排除 Bower_Components 和除 is-online 之外的所有 Node_modules”
以防万一 -要排除更多模块,请写入:
exclude: /(node_modules\/(?!is-online|another-es6-module|yet-another-one)|bower_components)/,
可能还有更漂亮的表达方式;如果你是审美家,试试你的运气 here .
完成后,检查输出文件中是否有字符串“...”。希望它消失了!
如果您喜欢,您可以在每次构建后自动检查“...”的输出,以确保不会错过任何模块。但话又说回来,它会在包含省略号的合法字符串文字上触发......
唷!我差点以为other forces were at play ...
<小时/>由于问题错误而导致的旧响应:
您的粗箭头函数返回一个未括在括号中的对象文字。
Returning object literals
Keep in mind that returning object literals using the concise body syntax
params => {object:literal}
will not work as expected.var func = () => { foo: 1 };
// Calling func() returns undefined!
var func = () => { foo: function() {} };
// SyntaxError: function statement requires a nameThis is because the code inside braces (
{}
) is parsed as a sequence of statements (i.e.foo
is treated like a label, not a key in an object literal).You must wrap the object literal in parentheses:
var func = () => ({ foo: 1 });
关于reactjs - 通天塔 : can't get "@babel/plugin-transform-destructuring" plugin to work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57444395/
这是关于非标准属性的。 https://facebook.github.io/react/docs/tags-and-attributes.html 在 react 中我做了这个: React.cr
我制作了 2 个组件:1)内容(使用 fetch() 显示数据)2)分页(共5页,每页16个对象) 我创建了 2 个状态变量,分别称为 start:0 和 end:16。现在,每当用户单击页码时,我都
我们正在使用 ReactJS 创建一个搜索前端。要求是当用户单击文档名称时,该文档必须在嵌入式查看器中打开。有人为此使用过任何 ReactJS 组件吗?否则,我应该使用 JQuery 查看器组件吗?请
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 1 年前。
我现有的项目: 前端框架 - PHP Codeigniter 和 PHP Laravel 后端框架 - JAVA Springboot 我正在尝试将前端框架更改为 ReactJS。我想知道与 Reac
我有一个实现刷新授权 token 的方案。在这种情况下,我为每种操作(发布、获取、删除)实现了一个通用操作,并使用参数调用它们。 export function Get(param) { return
我现在有 { _this.setState({startDate: input})}}/> 无论我一直在改变什么(onChange 部分到 ref 等等),当我 console.log 我的状态时,
我在两个不同的文件中有两个单独的组件 组件A 和 组件B 我在 中有一个按钮组件B 现在我想测试当 中的特定按钮时组件B 被点击,组件A 应呈现如下: import { render, screen,
我有一个包含几个问题的表格。一些问题有一组子问题。 这些是使用以下代码呈现的。 { Object.keys(this.props.moduleDetails.questions).map(
我有两个组件。第一个状态初始化: import React from 'react'; class One extends React.Component { constructor(prop
我的项目是一个对象数组,我只获取名称并在 3 in 3 的屏幕上渲染,使用“下一个”和“上一个”按钮更改名称,并且可以过滤字母。 我想要添加一个新值,在输入中键入并单击按钮添加。 我的代码按钮: ad
我有一个组件实例,应该从不同的地方更新。如何从其他几个组件中更新此组件的 props? class ParentComponent extends React.Component { ...
我想问,是否可以基于变量返回一个组件,我的想法是否可以: var location = this.props.location // Eg. Asia,Australia 我的问题是我需要单独手动导
有没有办法在渲染后立即选择要覆盖的文本?我的意思是选择 - 最佳答案 您可以尝试使用两种方法.focus和.select .focus() method sets focus on the speci
我渲染了以下内容: 这是事件处理程序: handleCompanySubmit(event) { console.log("company submit") e
作为ReactJS的初学者,我现在使用出色的ReactJS Datepicker。有关我的自定义日期格式的问题: 我没有找到任何文档来解释所有可能性,例如M是月份,MM是2个字母的月份,依此类推。(我
我创建了一个表并正在对其进行过滤,但是当我清除搜索查询时,表数据不会显示,并且表会卡在查询结果上。SearchBox 是文本框,TableData 是表格,在 Container 中我正在更改 Sea
我在表格设置中有图标,这样当单击图标时,会呈现不同的图标。现在这工作正常,但我想为我单击的行中的特定行重新呈现不同的图标,而不是在每一行中重新呈现不同的图标。不知道我将如何去做这件事。这是我的代码:
我正在尝试使用 React 构建一个简单的应用程序,它有两个组件,一个嵌入另一个组件。子组件是一个收缩的菜单,单击它时,它会展开。我希望能够在单击父元素或子元素失去焦点时重新收缩它。 这是父组件的样子
我需要知道 REACT JS 或 HTML5 中是否有任何 API 可以提供用户不活动时自动注销的功能。我的代码如下,我不知道出了什么问题,它给了我错误 startTimer 未定义和不必要的绑定(b
我是一名优秀的程序员,十分优秀!