New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
API 快速参考 #266
Comments
有任何问题,欢迎留言交流。 |
在开发阶段时候,我们是一个js文件代表一个模块,然后在demo页面上通过seajs.use([],function(){}很容易的做出测试案例。 |
@deng19891006 直接用 transport 后的模块 id 加载模块就好,比如 seajs.use('path/to/a+b+c.js', function() {
var a = seajs.require('a')
var b = seajs.require('b')
...
}) 或者通过命名空间来做 combo.js define(function(require, exports) {
exports.a = require('./a')
exports.b = require('./b')
exports.c = require('./c')
}) seajs.use('combo', function(combo) {
var a = combo.a
var b = combo.b
var c = combo.c
// ...
}) |
SeaJS 组件库,http://panxuepeng.github.io/seajslib/ |
<script src="xxx/sea.js" id="seajsnode" data-main="abc"></script>
这种使用方式在2.1版本里面去掉了么?怎么abc的模块找不到呢? |
src="assets/scripts/seajs/sea.js" id="seajsnode" data-main="application/dist/abc" |
@lovexiaobai seajs 2.1.0 已经去除 data-main 的支持. 请看相关 issue: #753 和 #813 |
上面说到concat后.入口模块的调用.我发现如果我将主模块的id命名为concat后的文件名称的话是可以执行的。我用transport提取,并且用concat打包。最后需要到a+b+c.js中取修改我的主模块id为a+b+c。我觉得很痛苦。有没有其他方法? |
@onmouseover 也可以这样,比如 concat 后的文件名是 combo.js,里面有 define('a', ...)
define('b', ...)
define('c', ...) 然后通过下面的方式可调用到 seajs.use('path/to/combo', function(){
// 这样来拿已经下载好的模块
var a = seajs.require('a')
}) |
@lifesinger 但是这样的话,我拿到的模块是null,模块的状态是2.就是说还没有被seajs执行.对象也没有暴露出去。比较纠结。 |
这样 seajs.use('path/to/combo', function(){
// 执行已下载的模块
seajs.use(['a', 'b', 'c'])
// 拿模块接口
var a = seajs.require('a')
}) 最好的方式还是,保持 id 和 uri 的一致哦。 |
@lifesinger 其实这样还是不能用,我尝试了使用seajs2.1.在2.1中玉伯重新加入了define(id,factory);的写法,于是我在定义入口函数之初就将我的模块id定义为打包后的文件名称(即path/a+b+c)。这样可以解决问题,但是我使用的提取插件是"grunt-cmd-transport":"0.1.1"。不支持手写id的时候提取依赖.于是我修改了作者的插件代码.在有id的情况下继续依赖.可以解决我说的不执行的问题。不过也因此从seajs2.0升级为2.1. |
为什么我用了seajs之后它会发起一个/seajs/sea.js.map的文件请求? |
原因: 这是 Chrome 等浏览器对 sourceMap 调试的支持. 解决办法: 在 Chrome 开发者工具的配置里,关闭掉 sourceMap 支持。如下图 将 Sources 栏下 Enable source maps 前面的勾去掉。 这个错误不会影响线上环境下的普通用户。 |
请问,seajs是否支持原版的第三方插件,比如jquery,如果我不模块化是否可以?目前我看到的都是模块化的;如果是jquery.ui 或者是 knockout.mapping这类插件,我该怎么做? |
@beijingme 需要模块化的. 具体如何模块话, 请看 这里 的封装例子. PS: 如果就只是依赖 jquery 的话, 基本上按格式: define(function(require, exports) {
var $ = require("jquery");
// 替换 全局 jquery 为 $
}); 就可以了. |
我自己开发的模块中使用了socketio,所以我在模块开始的部位进行了require操作 |
socket.io 文件长啥样? |
是直接npm install的,nodejs做server建在8000端口上 |
你的文件格式需要符合 CMD 规范才行。#242 |
socket.io 的 JS 文件是由他的 npm 包提供的,所以不能自己修改(除非你拷贝出来) |
@edokeh 我现在是拷贝一份出来的,有什么好的方法可以在我的模块中引入socketio呢?谢谢 |
exports是用来在模块内部对外提供接口,那有没有什么是用在在模块外部提供的接口? |
@hooray 需要时,暴露全局变量就好,该怎么调还怎么调 |
//require放在判断内无效?
if(false){
require('./test'); //test会被引入
seajs.use('./test'); //test不会被引入
} |
require是依赖,加载时会分析。虽然引入但没有被初始化。 |
seajs.use和seajs.require,use是用在页面里,require是用在模块定义里,还有什么别的区别吗。? |
require引入css输出路径是.css.js? |
【代码段1】 |
1.require()是同步加载js文件,同步加载就是同步阻塞加载,加载执行完成之后才执行下一行代码。 |
require 不是同步加载。 |
require.async 是在运行时异步加载异步执行。 require 是提前异步加载,同步执行。 |
异步执行??是用了多个线程吗??? |
不要想当然,建议研究下 seajs 和 requirejs 的源码。 |
var follow1 = null; });var follow2 = null; });Follow.prototype.getFollow = function(){ |
我觉得官方文档可以有 导航 之类的,方便速查。 |
还是希望能够提供一些其他的压缩合并代码方案,比如提供一些api,结合后台(java/php)实现线上动态压缩。在本地实现压缩再迁移到服务器上,比较适合那些改动少且由个人维护的网站,对于改动频繁或者多人协作的的网站,这一操作实在是无法忍受。毕竟不是所有项目都是跑在nodejs下的,如果能够提供一套java/php下的压缩方案,对seajs的推广应该是很有帮助的。 |
我按模块化jquery的方法模块化 zepto 会出现undefined is not a function的问题 |
有个建议,在文档里边能否注明一下各个配置生效的版本? 我们的项目以前用的是2.2.1,paths配置就无法使用。这个配置到2.3.0才可以用吧。 担心还遇到其他的这样的问题,给开发者看文档造成困扰... |
调用某个模块后不能立即得到其属性,可是为什么可以立即执行其函数 |
看着官网的5分钟入门,我居然真的信了,但是接下来花费的不仅仅是一个5分钟,而是成百上千的5分钟!下载的案例看起来千奇百怪,我就不明白为什么不能用一个简单的功能来做案例,里面放的文件一层嵌套一层,以至于找不到自己想要的。而且并没有考虑不是所有人都能熟练的或者编写过NODE,往上搜索到的教程也是千奇百怪,好像拥有各种写法,然后让人无从下手,特别是官网的文档,根本就不清楚需要表达什么内容。并不是不尊敬大神,初学者本身就没接触过这个东西,案例还做得那么复杂,又没有比较清晰明了的说明,真的感觉无从下手 |
大神,我另一个js页面使用了这段代码 |
//载入手势 |
页面就白屏了 |
被调用的js页面是把一个类抛出去了 |
引入模块时,什么有时候是直接require+名称就可以了,什么时候要加./ @lifesinger |
API 快速参考
该页面列举了 Sea.js 的常用 API。只要掌握这些用法,就可以娴熟地进行模块化开发。
seajs.config
用来对 Sea.js 进行配置。
更多配置项请参考:#262
seajs.use
用来在页面中加载一个或多个模块。
更多用法请参考:#260
define
用来定义模块。Sea.js 推崇一个模块一个文件,遵循统一的写法:
也可以手动指定模块 id 和依赖,详情请参考:#242
require
,exports
和module
三个参数可酌情省略,具体用法如下。require
require
用来获取指定模块的接口。注意,
require
只接受字符串直接量作为参数,详细约定请阅读:#259require.async
用来在模块内部异步加载一个或多个模块。
详细说明请参考:#242
exports
用来在模块内部对外提供接口。
详细说明请参考:#242
module.exports
与
exports
类似,用来在模块内部对外提供接口。module.exports
与exports
的区别,以及详细说明请参考:#242以上 7 个接口是最常用的,要牢记于心。
这里提供一个不错的社区贡献的 API 文档:http://yslove.net/seajs/
The text was updated successfully, but these errors were encountered: