summary下载cnpm并安装依赖创建数据库并导入数据库修改cnpmjs.org/config/index.js配置文件启动cnpm服务器使用添加管理员或者npm登录配置cnpmregistry(registryform,registryoffice)指向私有库地址发布包步骤下载cnpm安装依赖gitclonegit://github.com/cnpm/cnpmjs.orgcdcnpmjs.orgnpminstallinstall如果报错Error:EACCES:permissiondenied,access'/usr/local/cnpmjs.org',可以尝试修改该目录下的权限。修改权限后,不需sudo即可修改文件:chmod-R777#-R为递归删除,用于多目录。777为所有权限npminstall#重新安装创建数据库并导入mysql-u-pshowdatabases;#检查哪些数据库CREATEDATABASElibrary;#如果没有newmysql>use<数据库名>;mysql>sourcemysql>showtables;#查看所有导入的表并修改cnpm项目的配置文件//config.js:module.exports={debug:false,bindingHost:'0.0.0.0',//设置只能使用该IP访问cnpmserverscopes:['@sunrun'],//指定你私有包的前缀,你发布的包必须以这个开头enableCluster:true,//启用集群模式org',database:{db:'cnpmjs',//数据库名host:'192.168.8.200',//你的数据库地址port:3306,//默认用户名:'admin',//默认密码:'sunrun',//默认为空dialect:'mysql'//使用mysql,默认为sqlite, },enablePrivate:true,//打开私有库admins:{admin:'zxy@gz.sunrun.com',},syncModel:'none'//没有,存在,默认全部,这里设置为none,即,npm源不会同步existinglibrary到本地,//如果设置为存在,会同步在线npm源中已经存在的模块//比如你安装一个在线模块,会同步所有在线模块版本到本地库}下面列出了一些常用的配置说明。enableCluster:是否启用cluster-worker模式启动服务,默认false,生产链接建议为true;registryPort:API专用注册服务端口,默认7001;webPort:Web服务端口,默认7002;bindingHost:监听绑定的主机,默认为127.0.0.1,如果外面安装了本地Nginx反向代理或者Apache反向代理,建议不要更改;sessionSecret:会话盐;logdir:日志目录;uploadDir:临时??上传文件目录;viewCache:是否开启视图模板缓存,默认为false;enableCompress:是否开启gzip压缩,默认为false;admins:administrators,这是一个JSONObject,对应用户,键名为每个administratorName,键值为其邮箱地址,默认为{fengmk2:'fengmk2@gmail.com',admin:'admin@cnpmjs.org',dead_horse:'dead_horse@qq.com'};logoURL:Logo地址,不过对我来说这个配置已经被CNPM前端改得面目全非的人忽略了;广告版r:广告Banner地址;customReadmeFile:其实我们看到的cnpmjs.org主页中间很多冗长的介绍都是由Markdown文件转换而来的,你可以设置此项来自己替换这个文件;customFooter:自定义页脚模板;npmClientName:默认为cnpm,如果你有自研或者fork的npm客户端,请改成你自己的CLI命令,这个应该换成你在某些页面的描述中写的;backupFilePrefix:备份目录;database:数据库相关的配置,一个对象,如果默认不配置,就是~/.cnpmjs.org/data.sqlite的SQLite;db:数据的数据库名称;username:数据库用户名;密码:数据库密码;dialect:数据库适配器,可选"mysql"、"sqlite"、"postgres"、"mariadb",默认为"sqlite";hsot:数据库地址;端口:数据库端口;pool:数据库连接池相关配置,一个对象;maxConnections:最大连接数,默认为10;minConnections:最小连接数,默认为0;maxIdleTime:单个连接最大空闲时间,默认30000毫秒;storege:只对SQLite配置有效,数据库地址,默认为~/.cnpmjs/data.sqlite;nfs:包文件系统处理对象,一个Node.js对象,默认是fs-cnpm包,配置在~/.cnpmjs/nfs目录下,也就是说所有同步的包都会放在它里面在这个目录中;开发者可以使用一些其他的文件系统插件(比如上传到优拍云等),或者自己根据接口开发逻辑层,这些都是后话;registryHost:还没试过,估计是用来展示网页的,默认是r.cnpmjs.org;enablePrivate:是否开启私有模式,默认为false;如果是私有模式,只有管理员可以发布包,其他人只能从源站同步包下载包;如果是非私有模式,则所有登录用户都可以发布包;scopes:非管理员发布包时,只能以scopes中列出的命名空间为前缀进行发布。也就是说这是必填项,默认是['@cnpm','@cnpmtest','@cnpm-test'],根据苏倩达的解释,是为了方便管理,公司员工自觉按需发布;有关NPM作用域的更多信息,请参阅npm-scope;privatePackages:在这个配置项的注释中提到,由于历史包袱,一些已有的私有包(可能之前是用Git安装的)没有以命名空间的形式命名,而这个包本来是无法上传到CNPM的。该配置项数组用于将这些异常添加到白名单中。默认为空数组;sourceNpmRegistry:更新源NPM的注册地址,默认为https://registry.npm.taobao.org;sourceNpmRegistryIsCNpm:源注册表是否为CNPM,默认为true,如果您使用的源为官方NPM源,请设置为false;syncByInstall:安装包时如果包不存在,则尝试从更新源同步,默认为true;syncModel:更新模式(不过我觉得是打错了),有几种模式可以选择,默认是“none”;“exist”:定时同步数据库中已经存在的包;"all":定时同步所有源站包;syncInterval:同步间隔,默认为“10m”即十分钟;syncDevDependencies:是否同步每个包中的devDependencies包,默认为false;badgeSubject:包徽章显示的名称,默认为cnpm;userService:user认证接口默认为null,即没有用户相关的功能,即没有用户可以上传包。这部分需要自己实现接口功能和配置,比如对接公司的Gitlab,那就另当别论了;alwaysAuth:是否一直需要用户认证,即使是$cnpminstall等命令;httpProxy:代理地址设置,用于墙内源站墙外时启动cnpm服务器节点。node<--harmony_generators>dispatch.js#默认会开启两个端口,7001用于NPM的注册服务,7002用于web访问。--harmony_generators启用v8的和谐模式。如果端口被禁用,则设置防火墙允许端口号://打开注册表的端口号firewall-cmd--add-port=7001/tcp--zone=public--permanent//打开web默认端口号firewall-cmd--add-port=7002/tcp--zone=public--permanent//重置防火墙使配置刚刚生效firewall-cmd--reloadconfigurecnpmregistry(注册表,注册处)指向私有库地址npmconfigsetregistry<私有库地址>#例如http://10.211.55.10:7001/npmconfiggetregistry#查看注册信息npmconfigls#发布包如上npmversionpatch#如果是不是第一个版本,而是一个更新版本。必须执行npmpublish--registry=http://10.211.55.10:7001npmviewversions#查看发布后的版本升级版本号升级补丁版本号:npmversionpatch升级小版本号:npmversionminor升级大版本号:npmversion大版本号相关说明,npmversion后面的参数说明:patch:小的改动,比如bug修复等,版本号变化v1.0.0->v1.0.1minor:新增功能不加影响现有功能,版本号变更v1.0.0->v1.1.0major:破坏模块的向后兼容性,版本号变更v1.0.0->v2.0.0撤销或删除发布的包版本:npmunpublish--force