手机银行密码错误eslc22错误什么意思

百度EFE(Excellent FrontEnd)技术体系,前身是ECOM前端团队,后经过技术的发展,逐渐形成一套完善的前端技术体系。EFE技术体系现由多个遵循该技术体系的前端团队所组成。E(Excellent)代表我们追求卓越的技术态度。
ESL 中的错误提示信息
为浏览器端开发带来了诸多好处:模块声明、异步加载、依赖管理、bundle等,已经成为很多团队应用开发的标配。在正确的代码下,一切看起来都还好,但是当问题出现时,追查过程通常会令人头疼,此时Loader的提示信息对错误的追查非常关键。 是熊厂应用得比较多的 AMD Loader,本篇blog试图对
的错误场景与信息提示策略,以及如何追查错误,进行简单的介绍。主要涉及以下3个方面:
模块结构问题
初始化运行中的错误
疏忽导致在模块定义内使用了global require
先厚脸皮求关注。
首先,建议大家在开发中追查错误时,使用 chrome 浏览器的开发者工具。因为它对 re-throw 错误的 stack 跟踪与查看支持得比较好。
模块结构问题
和 RequireJS 一样,ESL 支持通过 waitSeconds 参数,指定超时时间。当到达指定时间后,如果模块还没加载完成,将抛出 MODULE_TIMEOUT 错误。这种错误通常用于追查模块结构问题。
模块缺失是常见的模块结构问题场景。下面的示例代码中可见,a 模块和 c 模块是缺失的。
1234567891011121314151617181920define(function (require) {
var a = require('./a');
var b = require('./b');});define(function (require) {
var c = require('./c');
var d = require('./d');});define({});
Miss Modules
可以看到,上面的提示信息分成两个部分:
Hang - 模块是存在的,但是由于依赖模块未能加载、或是循环依赖等原因,导致无法进行初始化。
Miss - 模块缺失,可能由于网络原因未加载完成,或者依赖模块名写错等原因导致。
如果提示信息里包含 Miss 项,一定要优先解决模块缺失问题。
ESL 对循环依赖的支持要优于 RequireJS,任何活的循环依赖场景都能支持,但是应用开发者有可能写出死循环依赖场景。比如下面的示例代码,所有模块之间的依赖都是装载时依赖,并且形成了环。
12345678910111213141516171819202122232425262728293031323334353637define(function (require) {
var a = require('./a');});define(function (require) {
var b = require('./b');
return {
getB: function () {
};});define(function (require) {
var c = require('./c');
return {
getC: function () {
};});define(function (require) {
var a = require('./a');
return {
getA: function () {
};});
循环依赖的场景下,我们会看到两条错误:
第一条是 MODULE_MISS ,意思是循环依赖的运行是在哪里中断的。
第二条是 MODULE_TIMEOUT,特点是:Miss 中没有任何模块,依赖环中所有模块都出线在Hang中。
Circular Dependencies
点击 MODULE_MISS 错误旁边的三角,找到 stack 中的 非esl.js 项,可以定位到循环依赖的 require 位置。提醒一下,如果在错误抛出后才打开开发者工具,是不会出现展开 stack 的三角箭头的,此时可以刷新下页面,让错误重新来一遍。
Circular Dependencies Source
循环依赖的解决办法是:
从 Hang 提示的模块列表,从后往前追查,理出整个循环依赖环的结构。
将环中任意一条依赖边,从装载时依赖改成运行时依赖。
123456789101112131415161718192021222324252627282930313233343536define(function (require) {
var a = require('./a');});define(function (require) {
var b = require('./b');
return {
getB: function () {
};});define(function (require) {
var c = require('./c');
return {
getC: function () {
};});define(function (require) {
return {
getA: function () {
var a = require('./a');
};});
初始化运行中的错误
有时候,我们的模块结构并没有问题,但写代码基本不可能一次写就完全正确。当 factory 运行出错时,模块初始化也无法完成。如果我们不使用 AMD,开发者工具将直接报错,并且定位准确。但由于要支持 MODULE_TIMEOUT,ESL 需要在一个 try 里运行初始化的 factory,做一些 MODULE_TIMEOUT 错误将用到的记录,然后重新抛出 error。于是,开发者工具对错误的显示就变了。下面通过一个例子,讲解这种场景下怎么追查。
12345678910111213define(function (require) {
var a = require('./a');
var b = require('./b');});define(function (require) {
alert(noExists);});define(function () {});
可以看到,上面的例子中,a.js 用到了一个未定义的变量,运行到这里时会出错。但我们看下面错误提示信息,对应的是 esl.js 的第一行,并不准确。
Runtime Error
这是由于 ESL 捕获了这个错误,然后重新抛出导致的。其实,这个错误的完整 stack 信息还在。请点击错误左边的小三角:
Runtime Error Stack
在这个 stack 信息中,有一些是 esl.js 的,这些可以忽略。点击 非esl.js 项,就能定位到错误的相应代码位置了。
Runtime Error Source
我听到过好多同学抱怨,说错误没法追查,都被吞掉了。其实,只要你试试点击那个小三角,一切如常。再提醒一下,如果在错误抛出后才打开开发者工具,是不会出现展开 stack 的三角箭头的,此时可以刷新下页面,让错误重新来一遍。
疏忽导致在模块定义内使用了global require
12345define(
function () {
require('./conf');
这是我们在应用过程中,发现的最难追查的问题,没有之一。这通常是由于疏忽导致的。看看上面的代码,看起来貌似没有问题,但是,factory 的形参少了 require。在运行的时候,整个过程是这样的:
Loader 能通过分析 factory 的 body,知道其依赖,并发起请求
其依赖模块请求回来后,能正常分析,到达 PREPARED 状态
由于全局存在 global require,所以没有形参,就会使用 global require,浏览器不会报变量不存在的错误
根据 AMD 的规定,sync require 找不到相应模块时,需要抛出错误
这下问题来了: 开发者看到了模块不存在的错误,但是怎么看都是对的,模块定义的请求被正确返回了,返回的模块定义代码也没问题,怎么就找不到呢,你TM是在逗我?
ESL针对这种场景,会抛出一种 REQUIRE_FATAL 错误。根据惯例,旁边的小三角也是能点开查看 stack 的。
REQUIRE_FATAL
解决办法很简单,去源码中 factory 的参数部分加上 require 就好了。
掌握以下几点,使用 AMD 和
开发应用就基本很方便,无障碍了。
使用 chrome 开发者工具。
遇到错误时,通过小三角点开查看 stack 信息,通过点击 非esl.js 项追查到源码的相应位置。
开发时使用 waitSeconds 配置参数。先解决 Miss 部分的问题,Hang 部分的模块从后往前追查。
注意 REQUIRE_FATAL。
&2016 Baidu EFE | Powered By一个错误什么意思
module.js:472
^Error: Cannot find module 'eslint-friendly-formatter'
at Function.Module._resolveFilename (module.js:470:15)
at Function.Module._load (module.js:418:25)
at Module.require (module.js:498:17)
at require (internal/module.js:20:19)
at Object.&anonymous& (E:\Vuechuxue\build\webpack.base.conf.js:5:31)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)npm ERR! Windows_NT 6.3.9600npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\kai\\AppData\\Roaming\\npm\\node_modules\\cnpm\\node_modules\\npm\\bin\\npm-cli.js" "--userconfig=C:\\Users\\kai\\.cnpmrc" "--disturl=https://npm.taobao.org/mirrors/node" "--registry=https://registry.npm.taobao.org" "run" "dev"npm ERR! node v7.2.0npm ERR! npm
v3.10.10npm ERR! code ELIFECYCLEnpm ERR! vue@1.0.0 dev: `node build/dev-server.js`npm ERR! Exit status 1npm ERR!npm ERR! Failed at the vue@1.0.0 dev script 'node build/dev-server.js'.npm ERR! Make sure you have the latest version of node.js and npm installed.npm ERR! If you do, this is most likely a problem with the vue package,npm ERR! not with npm itself.npm ERR! Tell the author that this fails on your system:npm ERR!
node build/dev-server.jsnpm ERR! You can get information on how to open an issue for this project with:npm ERR!
npm bugs vuenpm ERR! Or if that isn't available, you can get their info via:npm ERR!
npm owner ls vuenpm ERR! There is likely additional logging output above.npm ERR! Please include the following file with any support request:npm ERR!
E:\Vuechuxue\npm-debug.log
写下你的评论...
我已经解决了
请问一下,如何解决的呢?
install下载的有文件丢失 需要从新安装
找个网络好的地安装
写下你的评论...
Copyright (C)
All Rights Reserved | 京ICP备 号-2“Missing semicolon.” : “缺少分号.”,
“Use the function form of \”use strict\”.” : “使用标准化定义function.”,
“Unexpected space after ‘-’.” : “在’-'后面不应出现空格.”,
“Expected a JSON value.” : “请传入一个json的值.”,
“Mixed spaces and tabs.”: “空格和TAB重复.”,
“Unsafe character.” : “不安全的字符.”,
“Line too long.”: “本行中的字符超过设定的最大长度.”,
“Trailing whitespace.”: “本行末尾有过多无用空格.”,
“Script URL.” : “脚本URL.”,
“Unexpected {a} in ‘{b}’.” : “在 ‘{b}’ 中不该出现 {a}.”,
“Unexpected ‘{a}’.” : “不该在此出现’{a}’.”,
“Strings must use doublequote.” : “字符串需要用双引号”,
“Unnecessary escapement.” : “不需要转义”,
“Control character in string: {a}.” : “在字符串中出现了Control的字符”,
“Avoid \\’.” : “避免 \\”,
“Avoid \\v.” : “避免 \\v”,
“Avoid \\x-.” : “避免 \\x-”,
“Bad escapement.” : “错误的转义字符”,
“Bad number ‘{a}’.” : “错误的数字 ‘{a}’”,
“Missing space after ‘{a}’.” : “在’{a}’之后缺少空格”,
“Don’t use extra leading zeros ‘{a}’.” : “不要再’{a}’的前面用多余的0″,
“Avoid 0x-. ‘{a}’.” : “避免使用 0x-. ‘{a}’.”,
“A trailing decimal point can be confused with a dot ‘{a}’.” : “在’{a}’中使用点尾随小数点”,
“Unexpected comment.” : “不该在此处出现注释”,
“Unescaped ‘{a}’.” : “没有转义 ‘{a}’”,
“Unexpected control character in regular expression.” : “在正则表达式中出现了control字符”,
“Unexpected escaped character ‘{a}’ in regular expression.” : “在正则表达式中出现了没有转义的字符 ‘{a}’”,
“Expected ‘{a}’ and instead saw ‘{b}’.” : “应该用 ‘{a}’代替’{b}’”,
“Spaces are hard to count. Use {{a}}.” : “空格难以统计,请使用 {{a}}”,
“Insecure ‘{a}’.” : “不安全的 ‘{a}’”,
“Empty class.” : “空的class”,
“Expected a number and instead saw ‘{a}’.”:“应该用数字代替’{a}’”,
“‘{a}’ should not be greater than ‘{b}’.”:“‘{a}’不应该比’{b}’大”,
“‘hasOwnProperty’ is a really bad name.”: “‘hasOwnProperty’是关键字”,
“‘{a}’ was used before it was defined.”:“‘{a}’未定义就已经使用了.”,
“‘{a}’ is already defined.”:“‘{a}’被重复定义”,
“A dot following a number can be confused with a decimal point.”:“数字后面的一个点会被误认为是十进制的小数点”,
“Confusing minusses” : “容易混淆的负数表达-”,
“Confusing plusses.” : “容易混淆的正数表达+”,
“Unmatched ‘{a}’.” : “无法匹配的’{a}’”,
“Expected ‘{a}’ to match ‘{b}’ from line {c} and instead saw ‘{d}’.”:“在行{c}中需要用’{a}’和’{b}’匹配,用来代替’{d}’”,
“Unexpected early end of program.”:“程序不可预期的提前终止”,
“A leading decimal point can be confused with a dot: ‘.{a}’.”:“‘{a}’前的点容易混淆成小数点”,
“Use the array literal notation [].”:“使用数组的符号 []“,
“Expected an operator and instead saw ‘{a}’.”:“需要用一个符号来代替’{a}’”,
“Unexpected space after ‘{a}’.”:“在’{a}’之后不能出现空格”,
“Unexpected space before ‘{a}’.”:“在’{a}’之前不能出现空格”,
“Bad line breaking before ‘{a}’.”:“在’{a}’之前错误的换行”,
“Expected ‘{a}’ to have an indentation at {b} instead at {c}.”:“‘{a}’需要在{c}而不是{b}处缩进”,
“Line breaking error ‘{a}’.”:“换行错误 ‘{a}’”,
“Unexpected use of ‘{a}’.”:“此处不能用’{a}’”,
“Bad operand.”:“错误的操作数”,
“Use the isNaN function to compare with NaN.”:“使用isNaN来与NaN比较”,
“Confusing use of ‘{a}’.”:“容易混淆的’{a}’的使用”,
“Read only.”:“只读的属性”,
“‘{a}’ is a function.”:“‘{a}’是一个函数”,
‘Bad assignment.’:“错误的赋值”,
“Do not assign to the exception parameter.”:“不要给额外的参数赋值”,
“Expected an identifier in an assignment and instead saw a function invocation.”:“在赋值的语句中需要有一个标识符,而不是一个方法的调用”,
“Expected an identifier and instead saw ‘{a}’ (a reserved word).”:“需要有一个标识符,而不是’{a}’(保留字符)”,
“Missing name in function declaration.”:“在方法声明中缺少名称”,
“Expected an identifier and instead saw ‘{a}’.”:“需要有一个标识符,而不是’{a}’”,
“Inner functions should be listed at the top of the outer function.”:“内部函数的声明应该放在此函数的顶部。”,
“Unreachable ‘{a}’ after ‘{b}’.”:“在’{b}’之后无法获取’{a}’”,
“Unnecessary semicolon.”:“不必要的分号”,
“Label ‘{a}’ on {b} statement.”:“将’{a}’放在{b}的声明中”,
“Label ‘{a}’ looks like a javascript url.”:“‘{a}’看上去像一个js的链接”,
“Expected an assignment or function call and instead saw an expression”:“需要一个赋值或者一个函数调用,而不是一个表达式.”,
“Do not use ‘new’ for side effects.”:“不要用’new’语句.”,
“Unnecessary \”use strict\”.”:“不必要的\”use strict\”.”,
“Missing \”use strict\” statement.”:“缺少\”use strict\”的声明”,
“Empty block.”:“空的模块”,
“Unexpected /*member ‘{a}’.”:“不应出现 /*元素 ‘{a}’.”,
“‘{a}’ is a statement label.”:“‘{a}’是一个声明”,
“‘{a}’ used out of scope.”:“‘{a}’使用超出范围”,
“‘{a}’ is not allowed.”:“不允许使用’{a}’”,
“‘{a}’ is not defined.”:“‘{a}’没有被定义”,
“Use ‘{a}’ to compare with ‘{b}’.”:“使用’{a}’与’{b}’相比”,
“Variables should not be deleted.”:“变量需要被删除”,
“Use the object literal notation {}.”:“使用对象的文字符号 {}”,
“Do not use {a} as a constructor.”:“不要使用{a}作为一个构造对象”,
“The Function constructor is eval.”:“The Function constructor is eval.”,
“A constructor name should start with an uppercase letter.”:“一个构造对象的名称必须用大写字母开头.”,
“Bad constructor.”:“错误的构造对象”,
“Weird construction. Delete ‘new’.”:“构造对象有误,请删除’new’”,
“Missing ‘()’ invoking a constructor.”:“缺少括号()”,
“Avoid arguments.{a}.”:“避免参数.{a}.”,
“document.write can be a form of eval.”:“document.write是eval的一种形式”,
‘eval is evil.’:“尽量不要使用eval”,
“Math is not a function.”:“Math不是一个函数”,
“Missing ‘new’ prefix when invoking a constructor.”:“此处缺少了’new’”,
“Missing radix parameter.”:“缺少参数”,
“Implied eval is evil. Pass a function instead of a string.”:“传递一个函数,而不是一个字符串”,
“Bad invocation.”:“错误的调用”,
“['{a}'] is better written in dot notation.”:“['{a}']最好用点.的方式”,
“Extra comma.”:“多余的逗号”,
“Don’t make functions within a loop.”:“不要用循环的方式创建函数”,
“Unexpected parameter ‘{a}’ in get {b} function.”:“在{b}方法中不该用到参数’{a}’”,
“Duplicate member ‘{a}’.”:“重复的’{a}’”,
“Expected to see a statement and instead saw a block.”:“此处应该是语句声明.”,
“Too many var statements.”:“过多var的声明”,
“Redefinition of ‘{a}’.”:“‘{a}’被重复定义”,
“It is not necessary to initialize ‘{a}’ to ‘undefined’.”:“无需将’{a}’初始化为’undefined’”,
“Expected a conditional expression and instead saw an assignment.”:“此处需要一个表达式,而不是赋值语句”,
“Expected a ‘break’ statement before ‘case’.”:“在’case’之前需要有’break’.”,
“Expected a ‘break’ statement before ‘default’.”:“在’default’之前需要有’break’.”,
“This ‘switch’ should be an ‘if’.”:“此处’switch’应该是’if’.”,
“All ‘debugger’ statements should be removed.”:“请删除’debugger’的语句”,
“‘{a}’ is not a statement label.”:“‘{a}’不是一个声明标签.”,
“Expected an assignment or function call and instead saw an expression.”:“需要一个语句或者一个函数调用,而不是一个表达式”,
“Function declarations should not be placed in blocks. Use a function
expression or move the statement to the top of the outer
function.”:“函数的声明不能放在类似if的块中,需要放在外部函数的顶部.”
阅读(...) 评论()esl是什么_esl是什么意思
esl是什么_esl是什么意思
  esl是什么意思  ESL的意思就是英语作为第二语言(English as a Second Language的简称),是学校(小学,中学,大学,成人学校)开办的提高英语非母语的课程,让母语不是英语的学生可以尽快提高英文程度。在美国,从小学开始就有ESL课程,只要母语不是英语都可以参加。这种ESL课程就在学校里,不会占用课外时间。在美国的大学也有ESL课程,可以让外国学生一边上语言课,一边读大学课程。还有一种常见的ESL课程是由政府或者非盈利机构提供的免费或者非常便宜的语言课,一般提供给新移民,让新移民尽早适应环境的,通常说的都是下面几种:  1、 大学独立部门直接管理,课程包含各项考试进修、英语程度进级,目的在帮助学生通过考试、提升学生英文程度使其能顺利进修大学课程;这类语言学校不仅开设英语考试课程、语文进阶课程、尚有专业科目语文进修,例如商用英语、法律英语等。到大学附设的语言学校就读,另一项优点是可以充分利用学校资源,例如图书馆、健身中心、运动场、资讯室等。  2、由私人企业管理,为了确保优良品质和好的声誉,通常治学严谨又活泼,除了一般语言课程外,常有不同的团体文化活动,使学生在互动中增强学习能力。学生达到语言标准后,立刻进入大学正规课程。  3、类似语言补习班,为了具备市场竞争力,对学生照顾特别周全,这类学校附设辅导升学的服务,与很多美国大学联盟,免费辅导学生申请大学,并确保学生语言程度达到标准后,能顺利进入某所适合学生条件的美国大学就读。  4、附设在各地市政府或社区服务中心内,免费或以非常低廉的费用提供失学成人或新移民学习英语及其它课程。  对于很多想要进入美国的大学读书的国际学生,如果没有托福或者雅思成绩,一定要参加并通过ESL的考核,否则不能够参加专业课程的学习。ESL的考试分为听说读写四个部分,其中听力考试30分钟,阅读考试90分钟,写作60分钟,口语10 -15分钟。考试成绩分为1-5共四个等级,90~100分是5级,60分以下是1级,一般大学都要求学生达到3级以上才算合格,即70分以上。  如果学生没能通过ESL,雅思,托福的考试,学校会安排学生在入学后参加分班考试(Placement Test or Assessment Test),根据成绩,学生会被分配到不同级别的班级。学生在本级别的考试通过后才能上下一个级别的课。如果没有通过考试,只能继续在本级别学习。如果学生的英语水平已经达到了一定的水平,可以申请越级学习,但必须经过学校的测试,用成绩证明自己能够和母语为英语的本土学生一起学习。  ESL课程的主要分为两种:  1.强化课程(Intensive ESL)许多私立的中学或大学都会为本校还未通过ESL考试,雅思考试,托福考试的国际学生提供语言培训课程,这类语言培训课程就是ELS课程中的强化课程。  2.学术课程(Academic Course)学校为了便于本校的学生能进行更专业地学习,为已达到相应的语言考试成绩标准后开设的语言课程,这类语言培训课程就是ELS课程中的学术课程。  相关阅读:ESL分为五个等级  1、 ESLAO  针对的是完全不懂或是略懂一点简单英语的学生,是ESL课程中最基础的部分。  2、 ESLBO  针对懂少量日常英文的留学生,通常这些学生能够运用简单的词句,但是不能用英语表达自己的想法和意见。  3、 ESLCO  针对能用英语简单表达自己的想法,但是需要借助手势和身体语言来表达。表达通常不完整,不准确,在阅读方面存在很大的苦难。  4、 ESLDO  针对可以较完整的表达自己的想法,但是在表述方面存在语法错误的学生,阅读能力略低于与本地同级的学生。  5、 ESLEO  是本课程的最高级别,这部分学生对英语的掌握程度与本地学生几乎无异,在听、说、读、写四方面能力都较好。
下页更精彩:1
本文已影响人
热门新闻资讯
推荐新闻资讯
最新新闻资讯ESL 中的错误提示信息 - 推酷
ESL 中的错误提示信息
为浏览器端开发带来了诸多好处:模块声明、异步加载、依赖管理、bundle等,已经成为很多团队应用开发的标配。在正确的代码下,一切看起来都还好,但是当问题出现时,追查过程通常会令人头疼,此时Loader的提示信息对错误的追查非常关键。
是熊厂应用得比较多的 AMD Loader,本篇blog试图对
的错误场景与信息提示策略,以及如何追查错误,进行简单的介绍。主要涉及以下3个方面:
模块结构问题
初始化运行中的错误
疏忽导致在模块定义内使用了global require
先厚脸皮求关注。
首先,建议大家在开发中追查错误时,使用 chrome 浏览器的开发者工具。因为它对 re-throw 错误的 stack 跟踪与查看支持得比较好。
模块结构问题
和 RequireJS 一样,ESL 支持通过 waitSeconds 参数,指定超时时间。当到达指定时间后,如果模块还没加载完成,将抛出 MODULE_TIMEOUT 错误。这种错误通常用于追查 模块结构问题 。
模块缺失 是常见的 模块结构问题 场景。下面的示例代码中可见, a 模块和 c 模块是缺失的。
// main.jsdefine(function (require) {
var a = require('./a');
var b = require('./b');});// a.js// 无此文件// b.jsdefine(function (require) {
var c = require('./c');
var d = require('./d');});// c.js// 无此文件// d.jsdefine({});
Miss Modules
可以看到,上面的提示信息分成两个部分:
Hang - 模块是存在的,但是由于依赖模块未能加载、或是循环依赖等原因,导致无法进行初始化。
Miss - 模块缺失,可能由于网络原因未加载完成,或者依赖模块名写错等原因导致。
如果提示信息里包含 Miss 项,一定要优先解决模块缺失问题。
ESL 对循环依赖的支持要优于 RequireJS,任何活的循环依赖场景都能支持,但是应用开发者有可能写出死循环依赖场景。比如下面的示例代码,所有模块之间的依赖都是装载时依赖,并且形成了环。
// main.jsdefine(function (require) {
var a = require('./a');});// a.jsdefine(function (require) {
var b = require('./b');
getB: function () {
};});// b.jsdefine(function (require) {
var c = require('./c');
getC: function () {
};});// c.jsdefine(function (require) {
var a = require('./a');
getA: function () {
循环依赖的场景下,我们会看到两条错误:
第一条是 MODULE_MISS ,意思是循环依赖的运行是在哪里中断的。
第二条是 MODULE_TIMEOUT ,特点是: Miss 中没有任何模块,依赖环中所有模块都出线在 Hang 中。
Circular Dependencies
点击 MODULE_MISS 错误旁边的三角,找到 stack 中的 非esl.js 项,可以定位到循环依赖的 require 位置。提醒一下,如果在错误抛出后才打开开发者工具,是不会出现展开 stack 的三角箭头的,此时可以刷新下页面,让错误重新来一遍。
Circular Dependencies Source
循环依赖的解决办法是:
从 Hang 提示的模块列表,从后往前追查,理出整个循环依赖环的结构。
将环中任意一条依赖边,从装载时依赖改成运行时依赖。
// main.jsdefine(function (require) {
var a = require('./a');});// a.jsdefine(function (require) {
var b = require('./b');
getB: function () {
};});// b.jsdefine(function (require) {
var c = require('./c');
getC: function () {
};});// c.jsdefine(function (require) {
getA: function () {
var a = require('./a'); // 改了这里
初始化运行中的错误
有时候,我们的模块结构并没有问题,但写代码基本不可能一次写就完全正确。当 factory 运行出错时,模块初始化也无法完成。如果我们不使用 AMD,开发者工具将直接报错,并且定位准确。但由于要支持 MODULE_TIMEOUT ,ESL 需要在一个 try 里运行初始化的 factory,做一些 MODULE_TIMEOUT 错误将用到的记录,然后重新抛出 error。于是,开发者工具对错误的显示就变了。下面通过一个例子,讲解这种场景下怎么追查。
// main.jsdefine(function (require) {
var a = require('./a');
var b = require('./b');});// a.jsdefine(function (require) {
alert(noExists);});// b.jsdefine(function () {});
可以看到,上面的例子中,a.js 用到了一个未定义的变量,运行到这里时会出错。但我们看下面错误提示信息,对应的是 esl.js 的第一行,并不准确。
Runtime Error
这是由于 ESL 捕获了这个错误,然后重新抛出导致的。其实,这个错误的完整 stack 信息还在。请点击错误左边的小三角:
Runtime Error Stack
在这个 stack 信息中,有一些是 esl.js 的,这些可以忽略。点击 非esl.js 项,就能定位到错误的相应代码位置了。
Runtime Error Source
我听到过好多同学抱怨,说错误没法追查,都被吞掉了。其实,只要你试试点击那个小三角,一切如常。再提醒一下,如果在错误抛出后才打开开发者工具,是不会出现展开 stack 的三角箭头的,此时可以刷新下页面,让错误重新来一遍。
疏忽导致在模块定义内使用了global require
function () { // 这里忘写require了
require('./conf');
这是我们在应用过程中,发现的最难追查的问题,没有之一。这通常是由于疏忽导致的。看看上面的代码,看起来貌似没有问题,但是,factory 的形参少了 require。在运行的时候,整个过程是这样的:
Loader 能通过分析 factory 的 body,知道其依赖,并发起请求
其依赖模块请求回来后,能正常分析,到达 PREPARED 状态
由于全局存在 global require,所以没有形参,就会使用 global require,浏览器不会报变量不存在的错误
根据 AMD 的规定,sync require 找不到相应模块时,需要抛出错误
这下问题来了: 开发者看到了模块不存在的错误,但是怎么看都是对的,模块定义的请求被正确返回了,返回的模块定义代码也没问题,怎么就找不到呢,你TM是在逗我?
ESL针对这种场景,会抛出一种 REQUIRE_FATAL 错误。根据惯例,旁边的小三角也是能点开查看 stack 的。
REQUIRE_FATAL
解决办法很简单,去源码中 factory 的参数部分加上 require 就好了。
掌握以下几点,使用 AMD 和
开发应用就基本很方便,无障碍了。
使用 chrome 开发者工具。
遇到错误时,通过小三角点开查看 stack 信息,通过点击 非esl.js 项追查到源码的相应位置。
开发时使用 waitSeconds 配置参数。先解决 Miss 部分的问题, Hang 部分的模块从后往前追查。
注意 REQUIRE_FATAL 。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 eslint 错误提示 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信