Giter Site home page Giter Site logo

cnpm / cnpmjs.org Goto Github PK

View Code? Open in Web Editor NEW
3.6K 3.6K 747.0 2.93 MB

‼️ ‼️ ‼️ ‼️ DEPRECATED, please use https://github.com/cnpm/cnpmcore ‼️ ‼️ ‼️ ‼️

Home Page: https://npmmirror.com

License: Other

Makefile 0.34% JavaScript 90.89% Shell 0.30% CSS 4.65% HTML 3.75% Dockerfile 0.07%
cnpmjs npm npm-registry npmjs registry

cnpmjs.org's Introduction

‼️ ‼️ ‼️ ‼️ DEPRECATED, please use https://github.com/cnpm/cnpmcore instead ‼️ ‼️ ‼️ ‼️

‼️ ‼️ ‼️ ‼️ DEPRECATED, please use https://github.com/cnpm/cnpmcore instead ‼️ ‼️ ‼️ ‼️

‼️ ‼️ ‼️ ‼️ DEPRECATED, please use https://github.com/cnpm/cnpmcore instead ‼️ ‼️ ‼️ ‼️


cnpmjs.org

npm version Node.js CI Test coverage Known Vulnerabilities npm download FOSSA Status

logo

Description

Private npm registry and web for Enterprise, base on koa, MySQL and Simple Store Service.

Our goal is to provide a low cost maintenance, easy to use, and easy to scale solution for private npm.

What can you do with cnpmjs.org?

Features

  • Support "scoped" packages: npm/npm#5239
  • Support CORS
  • Simple to deploy: only need mysql and a simple store system.
  • Low cost and easy maintenance: package.json info can store in MySQL, MariaDB, SQLite or PostgreSQL. tarball(tgz file) can store in Amazon S3 or other object storage service.
  • Automatic synchronization: automatically sync from any registry specified. support two sync modes:
    • Sync all modules from upstream
    • Only sync the modules after first access.
  • Manual synchronization: automatic synchronization may has little delay. you can sync manually on web page.
  • Customized client: we provide a client cnpm to extend npm with more features(sync command, gzip support). And it is easy to wrap for your own registry which build with cnpmjs.org.
  • Compatible with npm client: you can use the official npm client with cnpmjs.org. you only need to change the registry in client config.
  • Support http_proxy: if you're behind a firewall, you can provide a http proxy for cnpmjs.org.

Docs

Develop on your local machine

Dependencies

  • node >= 8.0.0
  • Databases: only required one type

Clone code and run test

# clone from git
$ git clone https://github.com/cnpm/cnpmjs.org.git

# install dependencies
$ make install

# test
$ make test

# coverage
$ make test-cov

# update dependencies
$ make autod

# start server with development mode
$ make dev

Dockerized cnpmjs.org Installation Guide

Cnpmjs.org shipped with a simple but pragmatic Docker Compose configuration.With the configuration, you can set up a MySQL backend cnpmjs.org instance by executing just one command on Docker installed environment.

Preparation

Dockerized cnpmjs.org control command

Make sure your current working directory is the root of this GitHub repository.

Run dockerized cnpmjs.org
 $docker-compose up

This command will build a Docker image using the current code of repository. Then set up a dockerized MySQL instance with data initialized. After Docker container running, you can access your cnpmjs.org web portal at http://127.0.0.1:7002 and npm register at http://127.0.0.1:7001.

Run cnpmjs.org in the backend

$docker-compose up -d

Rebuild cnpmjs.org Docker image

$docker-compose build

Remove current dockerized cnpmjs.org instance

The current configuration set 2 named Docker Volume for your persistent data. If you haven't change the repository directory name, them will be "cnpmjsorg_cnpm-files-volume" & "cnpmjsorg_cnpm-db-volume".

Be Careful, the following commands will remove them.

$docker-compose rm
$docker volume rm cnpmjsorg_cnpm-files-volume
$docker volume rm cnpmjsorg_cnpm-db-volume

You can get more information about your data volumes using the below commands:

$docker volume ls  // list all of your Docker volume
$docker volume inspect cnpmjsorg_cnpm-files-volume
$docker volume inspect cnpmjsorg_cnpm-db-volume

How to contribute

  • Clone the project
  • Checkout a new branch
  • Add new features or fix bugs in the new branch
  • Make a pull request and we will review it ASAP

Tips: make sure your code is following the node-style-guide.

Sponsors

  • 阿里云 阿里云云效 (2016.2 - now)

License

MIT

Contributors


fengmk2


dead-horse


greenkeeperio-bot


ibigbug


killagu


alsotang


XadillaX


JacksonTian


Solais


4simple


21paradox


Zian502


albertZhang2013


ankurk91


huangbowen521


gwenaelp


KidkArolis


tq0fqeu


limianwang


LoicMahieu


paulvi


XXBeii


jpuncle


vincentmrlau


stoneChen


dickeylth


fossabot


gniavaj


hellojukay


liyangready

This project follows the git-contributor spec, auto updated at Sun Mar 20 2022 09:50:54 GMT+0800.

FOSSA Status

cnpmjs.org's People

Contributors

4simple avatar afc163 avatar alsotang avatar anhulife avatar cattail avatar dead-horse avatar dickeylth avatar elrrrrrrr avatar fengmk2 avatar fossabot avatar gniavaj avatar greenkeeperio-bot avatar hellojukay avatar ibigbug avatar jacksontian avatar jpuncle avatar killagu avatar limianwang avatar liyangready avatar loicmahieu avatar lvscar avatar solais avatar stonechen avatar vincentmrlau avatar wenbing avatar withoutmeat avatar wmzy avatar wxhuang avatar xadillax avatar xxbeii 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

cnpmjs.org's Issues

/all 接口太慢了

几个sql就将mysql 塞住了, 我临时屏蔽了 /all 同步接口了

| 12207400 | xxx | localhost:xxx | xxx | Query   | 38626 | Sending data      | 
 |

SELECT name, package FROM module WHERE id IN (SELECT module_id FROM tag WHERE tag="latest" AND name IN (SELECT distinct(name) FROM module WHERE gmt_modified > '2013-12-12 19:24:32.248')) ORDER BY name

ignore 404 on sync

[2013-12-10 10:02:17] [error] [http-server] sync error: DownloadTarballError: Download http://registry.npmjs.org/http-server/-/http-server-0.6.1.tgz fail, status: 404
    at /home/www/git/cnpmjs.org/controllers/registry/sync_module_worker.js:251:17
    at /home/www/git/cnpmjs.org/node_modules/eventproxy/lib/eventproxy.js:510:15
    at done (/home/www/git/cnpmjs.org/node_modules/urllib/lib/urllib.js:211:5)
    at WriteStream.EventEmitter.emit (events.js:117:20)
    at fs.js:1596:14
    at Object.oncomplete (fs.js:107:15)

拆分sql才行

Error: ER_NOT_SUPPORTED_YET: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
    at Query.Sequence._packetToError (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/sequences/Sequence.js:32:14)
    at Query.ErrorPacket (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/sequences/Query.js:82:18)
    at Protocol._parsePacket (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/Protocol.js:177:24)
    at Parser.write (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/Protocol.js:37:16)
    at Socket.ondata (stream.js:51:26)
    at Socket.EventEmitter.emit (events.js:117:20)
    at Socket.<anonymous> (_stream_readable.js:738:14)
    at Socket.EventEmitter.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:408:10)
    --------------------
    at Query.Sequence (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/sequences/Sequence.js:15:20)
    at new Query (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/sequences/Query.js:12:12)
    at Function.Connection.createQuery (/home/www/git/cnpmjs.org/node_modules/mysql/lib/Connection.js:47:10)
    at PoolConnection.Connection.query (/home/www/git/cnpmjs.org/node_modules/mysql/lib/Connection.js:131:26)
    at /home/www/git/cnpmjs.org/node_modules/mysql/lib/Pool.js:131:10
    at /home/www/git/cnpmjs.org/node_modules/mysql/lib/Pool.js:34:14
    at process._tickCallback (node.js:415:13)

unpublish local package bug

npm http DELETE http://registry.cnpmjs.org/cnpmjs.org/download/cnpmjs.org-0.1.0.tgz/-rev/59695
npm http 404 http://registry.cnpmjs.org/cnpmjs.org/download/cnpmjs.org-0.1.0.tgz/-rev/59695
npm ERR! 404 'cnpmjs.org' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, or http url, or git url.

npm ERR! System Darwin 13.0.0
npm ERR! command "/Users/mk2/git/nvm/v0.10.22/bin/node" "/Users/mk2/git/nvm/v0.10.22/bin/npm" "--cache=/Users/mk2/.npm/.cache/cnpm" "--registry=http://registry.cnpmjs.org" "unpublish" "--force"
npm ERR! cwd /Users/mk2/git/cnpmjs.org
npm ERR! node -v v0.10.22
npm ERR! npm -v 1.3.14
npm ERR! code E404
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/mk2/git/cnpmjs.org/npm-debug.log
npm ERR! not ok code 0

cnpm install && sync

cnpm install connect,如果私有源没有connect模块,则返回官方源,同时开始同步官方源到私有源。
cnpm install [email protected],如果没有指定版本,同样返回官方源,之后开始同步。

get emoji info error, need to unpublish this

$ cnpm sync emoji
logurl: http://registry.cnpmjs.org/emoji/sync/log/1329
[2013-12-13 15:42:26] user: fengmk2, sync emoji worker start.
[2013-12-13 15:42:26] [emoji] start...
[2013-12-13 15:42:26] [error] [emoji] sync error: SyntaxError: Unexpected end of input
    at Object.parse (native)
    at parseRow (/home/www/git/cnpmjs.org/proxy/module.js:85:22)
    at Query.<anonymous> (/home/www/git/cnpmjs.org/proxy/module.js:205:9)
    at Query._callback (/home/www/git/cnpmjs.org/node_modules/mysql/lib/Pool.js:133:10)
    at Query.Sequence.end (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/sequences/Sequence.js:75:24)
    at Query._handleFinalResultPacket (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/sequences/Query.js:143:8)
    at Query.EofPacket (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/sequences/Query.js:127:8)
    at Protocol._parsePacket (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/Protocol.js:177:24)
    at Parser.write (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/home/www/git/cnpmjs.org/node_modules/mysql/lib/protocol/Protocol.js:37:16)
    at Socket.ondata (stream.js:51:26)
[2013-12-13 15:42:26] [done] Sync emoji module finished, 0 success, 1 fail
Success: [  ]
Fail: [ emoji ]

sync page support logId

GET http://cnpmjs,org/sync/connect 会发起一次同步。
同步开始之后,url变成http://cnpmjs,org/sync/connect#logid=100

GET http://cnpmjs,org/sync/connect#logid=100将不会重新发起一次同步,将会直接开始获取logid=100的同步日志

这样sync由于请求npmjs.org/connect超时导致未能同步的时候,直接刷新页面就可以重试,如果开始同步,刷新也不会重新触发多一次同步

npm --registry=http://registry.cnpmjs.org 有坑

当我使用这句话装包的时候(npm --registry=http://registry.cnpmjs.org i express),返回 401。
相关代码在
qq20131218-2

由于我是 npm login 过的,所以我的请求自带 http basic auth 的头,于是在这一步被强迫验证从而被返回 401。


当使用 cnpm 的时候就可以成功安装包。因为 cnpm 默认使用空白的 .cnpmrc 文件,覆盖了 npm 原生的 auth 信息。
qq20131218-4

skip sync error version, sync next version

[2013-12-10 18:20:14] [error] [tair] sync error: DownloadTarballError: Download http://registry.npmjs.org/tair/-/tair-0.0.1.tgz fail, status: 500
    at /home/www/git/cnpmjs.org/controllers/registry/sync_module_worker.js:259:17
    at /home/www/git/cnpmjs.org/node_modules/eventproxy/lib/eventproxy.js:510:15
    at done (/home/www/git/cnpmjs.org/node_modules/urllib/lib/urllib.js:211:5)
    at WriteStream.EventEmitter.emit (events.js:117:20)
    at fs.js:1596:14
    at Object.oncomplete (fs.js:107:15)

slow SQL

var LIST_BY_AUTHOR_SQL = 'SELECT name, package FROM module WHERE id IN \
                          (SELECT max(id) FROM module WHERE author=?\
                          GROUP BY name )\
                          ORDER BY name';

var LIST_SINCE_SQL = 'SELECT name, package FROM module WHERE id IN \
                     (SELECT max(id) FROM module WHERE gmt_modified > ?\
                      GROUP BY name )\
                     ORDER BY name';

有问题

私有仓库规则

当开启保护模式, 将启动 admin 权限

所有人都能创建用户

  • 在页面上可以配置谁是管理员

只有管理员才能发布二方包

  • 非管理员需要通过web页面来申请发布二方包
  • 管理员能 unpublish 任意包

所有人都能同步三方包

# 其实这样是从源npm同步包以及包的依赖
cnpm sync [module] 

cdn 可配置

config.nfs

find out missing package

{"successes":["autofile-pack-macosx-app","accordion","argos","arg-err","angular-kendo","AMD","0","antycs","base64","backbone.geppetto","BigInt","box-view","browserify-on-the-fly","binarysearch","byvoidnodule","c-libnotify","bufferlist","ByteBuffer","cbz-web","catbot-websockets-client","aq","cf-brunch","checkup","components-bootstrap","cls","bag","coops-server-node","concur","cos","cosy-tail","csster","cron","cashew","dancho-npm-test","babel","a","Dateselect","dictation-fix-server","dice-roller","devmailer","difflet-papandreou","docparse-scraper-hes-imacros","DirScanner","DOM","DOMBuilder","ebay-app-meta","emvented","classy","entitiy-system","ep_pad_title","error: forbidden","est","example-manager","EVE","couch-cleaner","exist","cap","fc.lib.timer","faker","comments","file","fis-repos-client","florin-cu-exemplu","frog","get-unique-filename","gi-assert","git-url","google-analytics","glue","first-plugin","gr-event","deferred","grpn-cookies","grunt-contrib-xss","gruntextension-subgrunt","headrest-okay","hellojockchou","helloxxxxxxxx","hp-config-manager","html_json","F","icfp2006-um","idgaf","groundwork","execsync","graph","huk","II","iintranet","ifyouwanttogetthesumoftwonumberswherethosetwonumbersarechosenbyfindingthelargestoftwooutofthreenumbersandsquaringthemwhichismultiplyingthembyitselfthenyoushouldinputthreenumbersintothisfunctionanditwilldothatforyou","EventHub","jade-express","io","javascript.array.extensions","jimmod","joss","jParser","JPath","jq","imageMagick","jQuery","jsconcat","jsdev","jso","json-local","JSON","kevoree-utils","jsonstream","jsonutil","kfc-client","kido-solution","jdataview","jason","leadsec","leto","local-salesforce-dev-example","LiveScript","lolapi","JSONSelect","class","lactate","mdcached","mercury","loggy","mique_math_example2","mmalecki-test-package","dynamodb","mod_config","monoid-llc.github.com","moduleTest","mockery","my_module","my-first-module","mypack_yuki","json2","muffin","md5","ncurl","Mu","nko-website","NetOS","no-skeleton.docpad","node-authfilter","node-dummy","N","node-contentjs","node-gr","node-gerrit","node-invoice","node-picam","node-simon-says","noise-data","NORRIS","now-formatter","npm-fail-hard","npmd-ui-modal","nodevent","Neuro","ø","object-search","packagessssss","Mers","orb","parse-color","pct_enterprise_deployd","percolator","Lingo","pmp-access","printlog","postponejs","pocketbook","purelog-router-redicrect","rc-bin","qixiyumodule","peek","rccli","logstream","react-jquery","replaceapp","o","picomachine","requirejs-google-analytics","riverjs","rfinner","Nonsense","rlo.lib.util","rocksockets","roost-mongo","rx-stats2","Robusta","rollbar-ideame","run.js","s-site","sealion","selections","Scrap","signforms","shenke119","SenseJs","set","simpletest","Simple-Cache","Simplog","smi","socrata-metrics","smtp-protocol-ath","socrata-metrics-api","sourcemap-finder","soda-pop","squirrel","stupid=test","suckle","sugarskull","temp-file-server","SimpleQueue","sardines","test_pkg","test-npm","tempus","thinkpress","timy","tunigo-front-build","tztestjs","undpkg","uber","staticserver","uniform","util-middleware","sLog","Template","upnp-controlpoint","vchange-admin","viprog-watcher","visual-all","wavefront-obj","wod-roll","wintest","workaholic","x-simplemath14","WolfyEventEmitter","xtraicons","zeekay.github.com","thimble","twigjs","front-setting","express-thunder","Vector","index","doctest","iai-oop","ilsjs","dpm2","assert","xerror","iai-is","karma-e2e-dsl","rapgeniusapi","mongoose-access-gen","nodesql","ku4node-kernel","rcrypt","compressible","leaflet.markercluster","jsmv","generator-fedp","nTPL"],"fails":[]}, start sync time: Thu Dec 19 2013 11:58:11 GMT+0800 (CST). +2.6m
cnpmjs.org:sync:index send email with type: log, subject: Sync Finished, html: Sync packages from official registry finished.

sync module

  • diff npm and cnpm module versions
  • sync new versions

download total

40 002   downloads in the last day
475 284  downloads in the last week
1 706 188    downloads in the last month

no times and no versions

cnpmjs.org:sync:status sync [deferred] success +3s
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [c#0] [devmailer] start... +455ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [devmailer] no times and no versions +2ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [devmailer] all versions are exists +0ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [devmailer] synced success, 0 versions: +0ms
cnpmjs.org:sync:status sync [devmailer] success +457ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [c#0] [dice-roller] start... +419ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [dice-roller] no times and no versions +2ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [dice-roller] all versions are exists +0ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [dice-roller] synced success, 0 versions: +0ms
cnpmjs.org:sync:status sync [dice-roller] success +421ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [c#0] [dictation-fix-server] start... +301ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [dictation-fix-server] no times and no versions +3ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [dictation-fix-server] all versions are exists +0ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:33] [dictation-fix-server] synced success, 0 versions: +0ms
cnpmjs.org:sync:status sync [dictation-fix-server] success +304ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:34] [c#0] [difflet-papandreou] start... +495ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:34] [difflet-papandreou] no times and no versions +2ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:34] [difflet-papandreou] all versions are exists +0ms
cnpmjs.org:proxy:sync_module_worker [2013-12-19 11:10:34] [difflet-papandreou] synced success, 0 versions: +0ms
cnpmjs.org:sync:status sync [difflet-papandreou] success +497ms

full package info

由 module 和 tag 表能组合这个结构

{
  "_id": "cnpmjs.org",
  "_rev": "3-c3267f3804042445ff9b708fb0f276cb",
  "name": "cnpmjs.org",
  "description": "cnpmjs.org",
  "dist-tags": {
    "latest": "0.0.0"
  },
  "versions": {
    "0.0.0": {
      "name": "cnpmjs.org",
      "version": "0.0.0",
      "description": "cnpmjs.org",
      "main": "index.js",
      "scripts": {
        "test": "make test-all"
      },
      "dependencies": {},
      "devDependencies": {
        "should": "*",
        "blanket": "*",
        "travis-cov": "*",
        "coveralls": "*",
        "mocha-lcov-reporter": "*",
        "mocha": "*"
      },
      "homepage": "https://github.com/fengmk2/cnpmjs.org",
      "repository": {
      "type": "git",
        "url": "git://github.com/fengmk2/cnpmjs.org.git",
        "web": "https://github.com/fengmk2/cnpmjs.org"
      },
      "bugs": {
        "url": "https://github.com/fengmk2/cnpmjs.org/issues",
        "email": "[email protected]"
      },
      "keywords": [
        "cnpmjs.org"
      ],
      "engines": {
        "node": ">= 0.8.0"
      },
      "author": {
        "name": "fengmk2",
        "email": "[email protected]",
        "url": "http://fengmk2.github.com"
      },
      "license": "MIT",
      "readme": "cnpmjs.org\n=======\n\n[![Build Status](https://secure.travis-ci.org/fengmk2/cnpmjs.org.png)](http://travis-ci.org/fengmk2/cnpmjs.org) [![Coverage Status](https://coveralls.io/repos/fengmk2/cnpmjs.org/badge.png)](https://coveralls.io/r/fengmk2/cnpmjs.org) [![Build Status](https://drone.io/github.com/fengmk2/cnpmjs.org/status.png)](https://drone.io/github.com/fengmk2/cnpmjs.org/latest)\n\n[![NPM](https://nodei.co/npm/cnpmjs.org.png?downloads=true&stars=true)](https://nodei.co/npm/cnpmjs.org/)\n\n![logo](https://raw.github.com/fengmk2/cnpmjs.org/master/logo.png)\n\ncnpmjs.org desc\n\n## Install\n\n```bash\n$ npm install cnpmjs.org\n```\n\n## Usage\n\n```js\nvar cnpmjs.org = require('cnpmjs.org');\n\ncnpmjs.org.foo(function (err) {\n\n});\n```\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2013 fengmk2 &lt;[email protected]&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
      "readmeFilename": "README.md",
      "_id": "[email protected]",
      "dist": {
        "shasum": "6da265fb14b151f6b9f4b77967dd90fddfdea1f2",
        "tarball": "http://registry.npmjs.org/cnpmjs.org/-/cnpmjs.org-0.0.0.tgz"
      },
      "_from": ".",
      "_npmVersion": "1.3.14",
      "_npmUser": {
        "name": "fengmk2",
        "email": "[email protected]"
      },
      "maintainers": [
        {
          "name": "fengmk2",
          "email": "[email protected]"
        }
      ],
      "directories": {}
    }
  },
  "readme": "cnpmjs.org\n=======\n\n[![Build Status](https://secure.travis-ci.org/fengmk2/cnpmjs.org.png)](http://travis-ci.org/fengmk2/cnpmjs.org) [![Coverage Status](https://coveralls.io/repos/fengmk2/cnpmjs.org/badge.png)](https://coveralls.io/r/fengmk2/cnpmjs.org) [![Build Status](https://drone.io/github.com/fengmk2/cnpmjs.org/status.png)](https://drone.io/github.com/fengmk2/cnpmjs.org/latest)\n\n[![NPM](https://nodei.co/npm/cnpmjs.org.png?downloads=true&stars=true)](https://nodei.co/npm/cnpmjs.org/)\n\n![logo](https://raw.github.com/fengmk2/cnpmjs.org/master/logo.png)\n\ncnpmjs.org desc\n\n## Install\n\n```bash\n$ npm install cnpmjs.org\n```\n\n## Usage\n\n```js\nvar cnpmjs.org = require('cnpmjs.org');\n\ncnpmjs.org.foo(function (err) {\n\n});\n```\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2013 fengmk2 &lt;[email protected]&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
  "maintainers": [
    {
    "name": "fengmk2",
    "email": "[email protected]"
    }
  ],
  "time": {
    "0.0.0": "2013-12-03T09:58:24.368Z"
  },
  "author": {
    "name": "fengmk2",
    "email": "[email protected]",
    "url": "http://fengmk2.github.com"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/fengmk2/cnpmjs.org.git",
    "web": "https://github.com/fengmk2/cnpmjs.org"
  },
  "_attachments": {
    "cnpmjs.org-0.0.0.tgz": {
      "content_type": "application/octet-stream",
      "revpos": 2,
      "digest": "md5-UCSYBJ+CbiLETV2tAXTryw==",
      "length": 1822,
      "stub": true
    }
  }
}

tarball save to cdn

API

nfs.upload(req, {filename: 'name/name-version.tgz', size: $size}, function (err, result) {
  // result: {url: 'http://xxxx/name/name-version.tgz'}
});

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.