在打包项目的时候遇到了这种类型的错误,为了更好的解决这种问题,了解一下babel相关的知识,以及如何解决这类问题的方法。
在项目的根目录下创建.banelrc文件,内容为
{ "compact": false, "presets": ["env", "stage-0"], "plugins": ["transform-runtime"] }
它是一个可以将javascript语言的语法从最新的语法转换成向后兼容的语法,使项目可以在当前和旧版本的浏览器或其他环境中运行。
在babel执行编译的过程中,会从项目的根目录下的.babelrc文件中读取配置,该文件主要是对预设(presets) 和 插件(plugins) 进行配置。
该属性是告诉babel要使用那些插件,这些插件可以控制如何转换代码。
Babel默认只转换新的javascript语法,而不转换新的API,比如 Set, Maps, Proxy, Promise 等全局对象。以及一些在全局对象上的方法(比如 Object.assign)都不会转码。这时就需要选择合适的插件进行转码。
babel提供了三种转换的插件:
1.babel-polyfill
当运行环境中并没有实现的一些方法,它都会通过向全局对象和内置对象的prototype上添加方法来实现的。这样会造成全局空间污染。
2.babel-runtime
它不会污染全局对象和内置对象的原型,比如说我们需要Promise,我们只需要import Promise from 'babel-runtime/core-js/promise’即可,但它需要每个文件都要家import,会造成代码冗余
3.babel-plugin-transform-runtime
它是针对babel-runtime进行了公共方法的抽离,减少代码冗余。
因此我们通常会选择第三种插件进行配置
{
'plugins': [
[
'transform-runtime',
{
'helpers': ture,
// 默认为true,是否开启内联的babel helpers(即babel或者环境本来存在的某些对象方法函数)如:extends,etc这样的
在调用模块名字时将被替换名字。
'polyfill': true,
// 默认为true,是否把内置的东西(Promise, Set, Map)等转换成非全局污染的。
'regenerator': true,
// 默认为true,是否开启generator函数转换成使用regenerator runtime来避免污染全局域。
'moduleName': 'babel-runtime'
// 默认为 babel-runtime,当调用辅助 设置模块(module)名字/路径.
}
]
]
}
presets属性告诉Babel要转换的源码使用了哪些新的语法特性,presets是一组Plugins的集合。
babel-preset-env 会根据目标环境选择不支持的新特性来转译。
{
'presets': [
['env', {
'target': {
'browsers': ['last 2 versions', 'safari >= 7'],
// 支持每个浏览器最后两个版本和safari大于等于7版本所需的polyfill代码转换
'browsers': '> 5%',
// 支持市场份额超过5%的浏览器
'chrome': 56,
// 支持指定浏览器版本
"node": "current"
// 如果通过Babel编译Node.js代码的话,可以设置支持当前运行版本的nodejs。
},
'modules': false
// 启用将ES6模块语法转换为另一种模块类型。将该设置为false就不会转换模块。默认为 'commonjs'.但是现在webpack都帮我做了这件事了,所以我们不需要babel来做,因此需要在babel配置项中设置modules为false.
"include": ["transform-es2015-arrow-functions", "es6.map"]
// 包含一些插件
"exclude": ["transform-regenerator", "es6.set"]
// 排除一些插件
}]
]
}
参数类型:Boolean | “auto” 默认值:“auto” 该配置选项引导 babel 是否开启紧凑模式,紧凑模式会省略所有可选的换行符和空格. 当配置选项是”auto“的时候,babel 会根据文件的字符数判断,当字符长度 code.length > 50,000 时 会开启紧凑模式
我正在使用一个用RubyonRails构建的应用程序,目前错误处理非常差。如果通过ajax执行Controller方法,并且该方法导致500(或404或任何其他响应),则呈现500.html页面并将其作为AJAX请求的结果返回。显然,javascript不知道如何处理该HTML,网页看起来只是在等待响应。在AJAX调用期间发生错误时,rails是否有一种简单的方法来呈现error.rjs模板? 最佳答案 您可以在Controller的rescue_action或rescue_action_in_public方法中使用respond_
我是Rails的新手,正在使用Rails4。在我的应用程序中,我想返回所有JSON格式的404和500错误{"status":404,"message":"notfound"}有一个简单的方法可以做到这一点吗?因为我只是找到了使用rails3.x执行此操作的解决方案。谢谢我正在尝试执行此解决方案NeedtoreturnJSON-formatted404errorinRails但我在故障安全响应期间收到错误:未初始化的常量ErrorsController 最佳答案 也许您正在寻找这个:render:json=>@error_objec
我正在按照配置指南安装resque.我遇到了(OpenURI::HTTPError)。我正在使用RVM1.9.2-p180、rails3.0.6和POW.'resque-web'无法启动并出现500服务器错误。这到底是怎么回事?复制问题:用$redis-server启动redis使用$VVERBOSE=1QUEUE=file_serverakeenvironmentresque:work启动一个worker尝试启动Resque-Web:RAILS_ENV=developmentresque-webconfig/initializers/resque.rb配置/resque.ymldev
如何在Rails中实现动态的自定义错误页面?例如使用您的application.html.erb布局和页面中的一些动态字段的自定义404错误页面。另外,如何从本地机器测试它? 最佳答案 我在Google上查看了一些关于如何执行此操作的博客文章,不幸的是,大多数文章似乎都依赖于污染您的ApplicationController。我所做的是创建一个带有404消息的模板,然后使用该模板从rake任务更新public/404.html文件:#Rakefiletogeneratestatic404pagefile"public/404.htm
我们有一个土耳其语网站,一些旧链接被一些搜索引擎抓取。这些链接似乎格式不正确或无法处理,因此导致ActionController::BadRequest错误。在本地机器上developmentenv这会导致返回带有ActionController::BadRequest的Rails错误页面.但是在服务器上我们得到一个500servererror.此问题在其他几个页面上进行了讨论,例如here.但所有解决方案都无济于事。在这两种情况下,我们都希望重定向到pagenotfound-页面。我已经尝试过rescue_fromActionController::BadRequest和rescue
每次我尝试使用...重建索引rakesunspot:solr:reindex这些错误消息总是显示:Error-RSolr::Error::Http-500InternalServerError-retrying...Error-RSolr::Error::Http-500InternalServerError-ignoring...Error-RSolr::Error::Http-500InternalServerError-retrying...Error-RSolr::Error::Http-500InternalServerError-ignoring...我试着停止然后开始使用
如果我在本地执行,一切正常:require'net/ftp'ftp=Net::FTP.new("myftpserver.com","username","password")ftp.getbinaryfile("/myfile.zip","localfile.zip")ftp.close如果我尝试在我使用的Linux服务器上执行它,结果是:/usr/local/lib/ruby/1.9.1/net/ftp.rb:273:in`getresp':500IllegalPORTcommand.(Net::FTPPermError)from/usr/local/lib/ruby/1.9.1/n
我使用open-uri从远程网站获取图像,并将它们保存在我的RubyonRails应用程序中的本地服务器上。大多数图像显示没有问题,但有些图像没有显示。经过很长时间的调试session后,我终于发现(感谢thisblogpost)这是因为open-uri-libary中的classBuffer将大小小于10kb的文件视为IO对象而不是临时文件。我按照MicahWinkelspecht对thisStackOverflowquestion的回答设法解决了这个问题。,我将以下代码放在初始化程序的文件中:require'open-uri'#Don'tallowdownloadedfilesto
我正在编写ES6+代码并使用Babel对其进行编译(目前使用{stage:0}作为我的.babelrc配置)。所以我正在将所有内容编译到ES5。但我专门针对Chromev47+,它本身支持一些ES6+功能。默认Babeltransformers哪个我可以将我的代码列入黑名单(禁用)并仍然在Chrome47+中运行吗? 最佳答案 可用的ES6+功能Takealookatthispage查看Chrome和thispage中默认完全实现和启用的功能对于它们对应的Babel转换器。ES6FeatureReleaseBabelTransfor
我在ajax更新面板中使用了一个asp.net文本框。如果我在文本框中输入并按保存按钮,它会出现javascript错误Sys.WebForms.PageRequestManagerServerErrorException:Anunknownerroroccurredwhileprocessingtherequestontheserver.Thestatuscodereturnedfromtheserverwas:500请帮我看看为什么会出现这个错误? 最佳答案 可能ASP.NETRequestValidation启动并检测到潜