Sea.js 的调试接口 #263

Closed
lifesinger opened this Issue Jul 10, 2012 · 15 comments

Comments

Projects
None yet
@lifesinger
Member

lifesinger commented Jul 10, 2012

Sea.js 的调试接口

使用 Sea.js,无论开发时还是上线后,调试都很方便。下面一一阐述。

seajs.cache Object

通过 seajs.cache,可以查阅当前模块系统中的所有模块信息。

比如,打开 seajs.org,然后在 WebKit Developer Tools 的 Console 面板中输入 seajs.cache,可以看到:

Object
  > http://seajs.org/docs/assets/main.js: x
  > https://a.alipayobjects.com/jquery/jquery/1.10.1/jquery.js: x
  > __proto__: Object

这些就是文档首页用到的模块。展开某一项可以看到模块的具体信息,含义可参考:CMD 模块定义规范 中的 module 小节。

seajs.resolve Function

类似 require.resolve,会利用模块系统的内部机制对传入的字符串参数进行路径解析。

seajs.resolve('jquery');
// => http://path/to/jquery.js

seajs.resolve('./a', 'http://example.com/to/b.js');
// => http://example.com/to/a.js

seajs.resolve 方法不光可以用来调试路径解析是否正确,还可以用在插件开发环境中。

seajs.require Function

全局的 require 方法,可用来直接获取模块接口,比如

seajs.use(['a', 'b'], function() {

  var a = seajs.require('a')
  var b = seajs.require('b')

  // do something...
})

seajs.data Object

通过 seajs.data,可以查看 seajs 所有配置以及一些内部变量的值,可用于插件开发。当加载遇到问题时,也可用于调试。

seajs.log Function

由 seajs-log 插件提供,详见:https://github.com/seajs/seajs-log

seajs.find Function

由 seajs-debug 插件提供,详见:https://github.com/seajs/seajs-debug


Sea.js 还有 debug 插件:seajs-debug

有了这些方法和插件,能极大地方便开发维护,赶快试试吧。

@lifesinger

This comment has been minimized.

Show comment
Hide comment
@lifesinger

lifesinger Jul 10, 2012

Member

有任何问题,欢迎留言交流。
注意:已解决的问题,会在整理后删除掉。

Member

lifesinger commented Jul 10, 2012

有任何问题,欢迎留言交流。
注意:已解决的问题,会在整理后删除掉。

@lifesinger lifesinger closed this Jul 10, 2012

@lifesinger

This comment has been minimized.

Show comment
Hide comment
@lifesinger

lifesinger Aug 15, 2012

Member

seajs.find 返回结果调整为始终返回数组

在 1.2.0 时,返回结果为:

如果没有找到匹配的模块,则返回 null
如果找到一个匹配的模块,则返回该模块的接口
如果找到多个匹配的模块,则返回由这些模块接口组成的数组

从 1.2.1 开始,调整为:

如果没有找到匹配的模块,则返回空数组 []
如果找到一个或多个匹配的模块,则返回由这些模块接口组成的数组

这样使用起来更方便。

由于 seajs.find 默认只推荐在开发调试时使用,所以这个调整理论上不会影响线上代码。但如果线上代码有用到,需要特别注意并修改下。

Member

lifesinger commented Aug 15, 2012

seajs.find 返回结果调整为始终返回数组

在 1.2.0 时,返回结果为:

如果没有找到匹配的模块,则返回 null
如果找到一个匹配的模块,则返回该模块的接口
如果找到多个匹配的模块,则返回由这些模块接口组成的数组

从 1.2.1 开始,调整为:

如果没有找到匹配的模块,则返回空数组 []
如果找到一个或多个匹配的模块,则返回由这些模块接口组成的数组

这样使用起来更方便。

由于 seajs.find 默认只推荐在开发调试时使用,所以这个调整理论上不会影响线上代码。但如果线上代码有用到,需要特别注意并修改下。

@jason7758

This comment has been minimized.

Show comment
Hide comment
@jason7758

jason7758 Sep 14, 2013

Sea.js 还有 debug 插件:seajs-debug 链接地址错误

Sea.js 还有 debug 插件:seajs-debug 链接地址错误

@afc163

This comment has been minimized.

Show comment
Hide comment
@afc163

afc163 Sep 14, 2013

Member

@jason7758 已修复

Member

afc163 commented Sep 14, 2013

@jason7758 已修复

@hotoo

This comment has been minimized.

Show comment
Hide comment
@hotoo

hotoo Sep 22, 2013

Member
  1. seajs.require 范例不当,这样会带来不正确使用的模仿者。
  2. 建议着重强调这是调试(DEBUG)的接口,不建议实际代码中使用。
Member

hotoo commented Sep 22, 2013

  1. seajs.require 范例不当,这样会带来不正确使用的模仿者。
  2. 建议着重强调这是调试(DEBUG)的接口,不建议实际代码中使用。
@lifesinger

This comment has been minimized.

Show comment
Hide comment
@lifesinger

lifesinger Sep 22, 2013

Member

@hotoo

seajs.use(['a', 'b'], function() {

  var a = seajs.require('a')
  var b = seajs.require('b')

  // do something...
})

上面用法妥当的,具体可以人肉问 @lepture

Member

lifesinger commented Sep 22, 2013

@hotoo

seajs.use(['a', 'b'], function() {

  var a = seajs.require('a')
  var b = seajs.require('b')

  // do something...
})

上面用法妥当的,具体可以人肉问 @lepture

@xieranmaya

This comment has been minimized.

Show comment
Hide comment
@xieranmaya

xieranmaya Jun 13, 2014

seajs.require可以直接在全局作用域里调用吗?

define('x',function(){
    console.log('defining x');
    return 'x';
});
var x = seajs.require('x');

x还是为空
看了一下源代码,seajs.require会直接从cache里读取,如果define里的函数没有初始化,它就会返回空内容:

seajs.require = function(id) {
  return (cachedMods[Module.resolve(id)] || {}).exports
}

但如果我在seajs.require('x')之前运行一下seajs.use('x'),则seajs.require会正确返回(在控制台中,即这三段代码分别在控制台中运行).
但直接运行以下代码x同样还是为空:

define('x',function(){
    console.log('defining x');
    return 'x';
});
seajs.use('x');
var x = seajs.require('x');

从seajs的代码上看,seajs.require会直接从cache里返回内容,并不会判断当前require的模块有没有初始化,应该是这个逻辑的问题.
seajs版本2.1.1

seajs.require可以直接在全局作用域里调用吗?

define('x',function(){
    console.log('defining x');
    return 'x';
});
var x = seajs.require('x');

x还是为空
看了一下源代码,seajs.require会直接从cache里读取,如果define里的函数没有初始化,它就会返回空内容:

seajs.require = function(id) {
  return (cachedMods[Module.resolve(id)] || {}).exports
}

但如果我在seajs.require('x')之前运行一下seajs.use('x'),则seajs.require会正确返回(在控制台中,即这三段代码分别在控制台中运行).
但直接运行以下代码x同样还是为空:

define('x',function(){
    console.log('defining x');
    return 'x';
});
seajs.use('x');
var x = seajs.require('x');

从seajs的代码上看,seajs.require会直接从cache里返回内容,并不会判断当前require的模块有没有初始化,应该是这个逻辑的问题.
seajs版本2.1.1

@army8735

This comment has been minimized.

Show comment
Hide comment
@xieranmaya

This comment has been minimized.

Show comment
Hide comment
@xieranmaya

xieranmaya Jun 13, 2014

原来是这样,我们国际站这边还在用2.1.1版本,看来要升级了
多谢~

原来是这样,我们国际站这边还在用2.1.1版本,看来要升级了
多谢~

@tonitech

This comment has been minimized.

Show comment
Hide comment
@tonitech

tonitech Jul 3, 2014

文中的seajs.resolve作者手误写成了seajs.reslove,请改正过来,谢谢!

tonitech commented Jul 3, 2014

文中的seajs.resolve作者手误写成了seajs.reslove,请改正过来,谢谢!

@army8735

This comment has been minimized.

Show comment
Hide comment
@army8735

army8735 Jul 3, 2014

Member

@tonitech 一.一

Member

army8735 commented Jul 3, 2014

@tonitech 一.一

@w567675 w567675 referenced this issue in w567675/seajs Aug 26, 2014

Closed

整理seajs相关 #1

@jack-Lo

This comment has been minimized.

Show comment
Hide comment
@jack-Lo

jack-Lo Mar 3, 2015

在seajs.use的回调里输出seajs.cache,第一项“_use_0”是什么?如果我要拿到所有的模块,我要怎么筛选?

jack-Lo commented Mar 3, 2015

在seajs.use的回调里输出seajs.cache,第一项“_use_0”是什么?如果我要拿到所有的模块,我要怎么筛选?

@ruofeng086

This comment has been minimized.

Show comment
Hide comment
@ruofeng086

ruofeng086 Oct 31, 2015

seajs.resolve和seajs.use 有什么区别?

seajs.resolve和seajs.use 有什么区别?

@helei2015

This comment has been minimized.

Show comment
Hide comment
@helei2015

helei2015 May 16, 2016

我不是很懂这个sea.config中的映射是怎么回事,请大家帮帮忙。。。

我不是很懂这个sea.config中的映射是怎么回事,请大家帮帮忙。。。

@wjhcc2018

This comment has been minimized.

Show comment
Hide comment
@wjhcc2018

wjhcc2018 Jul 13, 2016

我用了map以后,为什么在IE10下加载js 不执行define里面的函数了呢
paths:{
"common":path+"/assets/common/sea_module/",
"utils":path+"/assets/common/sea_module/utils",
"core":path+"/assets/common/sea_module/core",
"plug":path+"/assets/common/plug/",
"dealer":path+"/assets/dealer/",
"front":path+"/assets/front/",
"manage":path+"/assets/manage/",
"supplier":path+"/assets/supplier/"
},
preload: [
Function.prototype.bind ? '' : 'es5',
'common'
]
,
map: [[/^(..(?:css|js))(.)$/i, '$1?v='+staticVersion+'']],

我用了map以后,为什么在IE10下加载js 不执行define里面的函数了呢
paths:{
"common":path+"/assets/common/sea_module/",
"utils":path+"/assets/common/sea_module/utils",
"core":path+"/assets/common/sea_module/core",
"plug":path+"/assets/common/plug/",
"dealer":path+"/assets/dealer/",
"front":path+"/assets/front/",
"manage":path+"/assets/manage/",
"supplier":path+"/assets/supplier/"
},
preload: [
Function.prototype.bind ? '' : 'es5',
'common'
]
,
map: [[/^(..(?:css|js))(.)$/i, '$1?v='+staticVersion+'']],

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment