Giter VIP home page Giter VIP logo

spm's Introduction

spm

NPM version Build Status NPM downloads

Brand new static package manager for browser.


spm 从 3.9 开始将不再管理组件的生命周期, 即不再有 spmjs.io. 所以相应的逻辑全部去除. 请使用 npm 来管理组件.

Install

$ npm install spm -g

Usage

Packaging Server

Report a issue

License

SPM is available under the terms of the MIT License.

Memo

spm's People

Contributors

afc163 avatar crossjs avatar fengmk2 avatar gitter-badger avatar hotoo avatar ikobe-zz avatar klvoek avatar lepture avatar lizzie avatar popomore avatar soda-x avatar sorrycc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spm's Issues

support alias in sbuild

现在已基本够用,但当有 alias 时,sbuild 未能处理 alias

测试用例:

cd path/to/seajs/src/test/modules/alias
sbuild --combo program.js

Embed css require

css 在考虑做内嵌支持。比如在 a.js 里,require('a.css'),那么:

sbuild a.js --combo css

那么 a.js 里会自动内嵌 a.css(保存字串在 js 里,运行时动态生成 style)

node端的“jsonp”兼容

现在server端为了作为web的jsonp存在,大部分数据保留了define,导致node端每次获得数据后都需要正则过滤掉define();,比较尴尬。两种解决方案:

  • 请求作为web服务存在,web服务处理标准的jsonp,即用http://seajs.cloudfoundry.com/registry 代替目前的静态文件data.js。
  • node端做一个普通jsonp处理的兼容层。

seajs loader service

类似 YLS,将依赖分析和打包都放到服务器端,实现自动 sbuild --combine [all]

有了这个,就可以代替淘宝现在的 combo 了。

增加force参数,强制更新。

https://github.com/seajs/spm/issues/17

https://github.com/seajs/spm/issues/8#issuecomment-1256668

这两个地方都提到需要一个force参数,来界定是否强制更新。

目前如果模块名字+版本号不换,内容直接忽略,不更新。版本号则无判断,直接更新。

该参数涉及以下强制内容:

  1. 按照版本号规范,仅更新符合规范的版本;而force参数则强制更新非稳定版本,比如backbone0.5.0-pre
  2. 强制更新模块,用于一些hotfix没有更新版本号。

注意web使用的data.js 依旧每次会强制更新。

配合--output的部分,需要提供指定版本的安装

npm部分是如此完成的。

npm install express@>0.1.1

因为有了local跟server两种概念,所以客户端需要区分。

还是说,服务端永远仅提供最新版本给用户安装?(旧版本保留,但是装不到)

let transport to support package.json

查看:

modules/querystring/transport.js

信息直接从 package.json 中获取
package.json 中没有的,再在 transport.js 中通过 @XX 补足

这意味着我们之前定的一些 tag name 要修改,以遵守 package 规范:

@desc  -> @description
@url -> @homepage
@tags -> @keywords

文河完善下,辛苦!

提供基本模板,兼容npm模块。

基本模板依赖于package.json的起步信息,package.json 通过npm获取,然后根据基准模板,迁移npm模块。

define(function(require, exports, module) {/*{{code}}*/});

如何界定发布版本?

#17 所提到的,pre跟dev版本不纳入,但是目前还有一些模块是没有遵循“约定”来更新。

是否需要一些特定的约定。

比如版本号,就仅支持以下版本号,如果不一样,那就要在transport.js里特殊指定来覆盖package.json 里的配置。

 [0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?

update modules transport.js

文河辛苦了,review 了下 transport, 从功能上讲已经 ok, 赞!

还有几个后续工作:

  1. 文档
  2. modules 目录下,underscore 等类库自身有 package.json, 可以修改下 transport.js, 重新获取打包下

辛苦了^o^

transport improvement

赞文河的速度。看了下 modules 目录,还有几个值得讨论的点:

  1. 如果从 package.json 里获取到的是 pre, dev 等版本,是否默认不下载,并提示用户。可以增加 -f 参数,强制下载。spm 库里,不保留非正式版本。
  2. 还是 seajs 的问题。0.9.3 目录下,有四个文件。这个特殊处理下?增加 @filename sea 来标明?

还有些小代码重构,我直接提交了,文河 merge 下

node端的“jsonp”兼容

现在server端为了作为web的jsonp存在,大部分数据保留了define,导致node端每次获得数据后都需要正则过滤掉define();,比较尴尬。两种解决方案:

  • 请求作为web服务存在,web服务处理标准的jsonp,即用http://seajs.cloudfoundry.com/registry 代替目前的静态文件data.js。
  • node端做一个普通jsonp处理的兼容层。

.tspt文件验证工具

package.json 可以通过简单的json验证,而我们还需要起码验证以下是否合法。

@src
/*{{code}}*/

split querystring module to single project

剥离出去,放到 lifesinger 账号下去。

以后所有模块都采用这样方式,seajs 只有 loader 和 spm, 模块都来自社区,充分体现“海纳百川”

jquery-modules project

最近接触到好几个 jquery 插件,都无法简单通过 transport 的方式来实现打包(还依赖 css 和 图像 等资源)

因此考虑单开一个 jquery-modules 项目来中转,目录有二:

  1. 使得 transport 更简单
  2. 保证 jquery 插件的质量,目前看了些插件,质量的确堪忧,即便是一些很流行的插件

担忧:这搞下去,有可能又会成为一个 kissy ui library, 只不过 dom 库是基于 jquery. 感觉不能走这条路,可是老天,不怎么搞的话,路在何方?

package.json里获取tspt信息

学习ender,直接通过package.json跟用户提供的整个package包读取相对路径获得tspt文件。进而transport 整个package

提供--tspt跟--output参数

满足定制化输入输出的要求。

但是如此不会被计算入data.js 纯粹作为一个独立的迁移工具使用。

将data.js 改为对象

取缔现在的数组形式,需要一个纯粹的key:value来存储所有模块

需要同步修改的地方:

  1. web/registry
  2. 调用generate/remove的地方
  3. modules.seajs.com 里的页面调用

feedbacks from community

有没有可能把 combo 写成服务端的接口,让开发者脱离手动打包这一过程?

这个类似 YLS
seajs 里,可以考虑实现
先记录下

spm functions

上次讨论中的一些记录:

  • node 端,假设为 spm:
    1. spm install 'xx' 会在约定目录生成 xx-debug.js 和 xx.js
    2. spm update 'xx' 更新?
    3. spm 更多命令,可参考 ender

install 好像也不太妥,都想想有无更好的命名

依赖安装

作为top-level id获取依赖,安装至seajs所在目录。

modules wrapping template

模板结构modules/{name}/sea-pkg.js

/**
 * @name frank
 * @desc desc
 * @url http://dafdsa
 *
 * @tags a,b,c,c
 *
 * @src http://ababa
 * @min http://fdsafdsa
 */
define(function(require, exports, module) {
    exports.version = $.jquery;
    'code';
});

输出为

modules/{name}/{version}/{name}-debug.js
modules/{name}/{version}/{name}.js

{version}从exports.version中寻找依赖获得。

其他信息从页头的annotation 处获得

data.js 重复输出

目前web里通过数组呈现,数据又是key唯一,可以用Object表示,两边转换出现问题。

后续考虑仅做Object输出,web部分要用,由webAPI里调整一下数据结构输出,否则前期处理逻辑太多了。

支持zip/tgz包的输入和输出

配合定制化输入输出,支持zip包。

tspt的位置通过package.json的位置得出相对路径。然后根据package.jsonmain入口逐一transport

按照基本惯例,添加delete操作

目前存在build操作,根据CRUD,build现在处于C跟U的部分,R的部分在web端读取,提供下载等,缺个D操作,负责清理模块,清理data.js 删除的时候也要检查一下依赖项,如果有依赖模块,需要给出警告。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.