npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

my-ionic-demo

v0.0.12

Published

An Ionic project

Readme

Link移动端工程

一、写在前面【重要!!!】

1、编码过程中,切莫只盯着自己的模块,若发现有通用型组件,务必咨询是否已有可用组件,若有,则直接使用,对于不能完全满足自身需求的,可与组件创建人协商如何兼容;若没有,则告知大家本人即将开发某某通用组件,不要重复封装
2、对于编写好的通用组件、服务或管道等等,应该完善注释和使用方式,并在提交之后告知所有人开发者,后续类似某某功能可使用此通用组件
3、对于复杂组件等,应该在app-dev处提供使用demo【可选】

二、工程目录

.
├── build               			    [平台初始化/编译脚本]  
├── cordova               			[cordova工程相关文件]  
├── e2e               			 	[端到端测试]  
├── platforms               			[原生工程目录] 
    ├── android                         [预置的android工程,编译打包时会使用到,勿动] 
    ├── ios                             [预置的ios工程,编译打包时会使用到,勿动] 
├── src            				 	[主要工程目录文件]  
	├── app                 	 	    [业务代码] 
	    ├── app-basic                 [基础内容和全局方法、参数] 
	        ├── function.ts                 [基础方法,可直接再组件等ts文件中import使用,若需要在html中使用,则方法应该在global.ts中再次声明,并通过global服务进行调用] 
	        ├── global.ts                   [全局变量,存储应用、基础、系统、用户信息] 
	    ├── app-component             [guide、login、version等等游离于业务模块之外的顶层组件] 
		├── app-dms                 	[DMS业务模块]
		├── app-marketing             [Marketing业务模块]
		├── lnk-component             [通用组件模块文件]
		├── lnk-directive             [指令模块文件]
		├── lnk-pipe                 	[管道模块文件]
		├── lnk-service               [服务文件]
		    ├── address                        [地址值列表服务]
		    ├── data                           [数据共享服务]
		    ├── http                           [Http服务和拦截器]
		    ├── i18                            [多语言服务]
		    ├── init-app                       [应用初始化服务]
		    ├── ionic-api                      [封装ionic api reference]
		    ├── ionic-native                   [封装ionic native api]
		    ├── jpush                          [极光推送服务]
		    ├── local-storage                  [封装的localStorge服务]
		    ├── location                       [定位服务]
		    ├── log                            [日志服务]
		    ├── login                          [登录服务]
		    ├── lov                            [值列表服务]
		    ├── register-device                [设备注册服务]
		    ├── route                          [路由服务]
		    ├── version                        [版本检测服务]
		    ├── workflow                       [工作流服务]
		├── router-guard              [路由守卫]
		├── app.component.html        [根组件]
		├── app.component.spec.ts     [根组件]
		├── app.component.ts          [根组件]
		├── app.module.ts             [根模块]
		├── app-routing.module.ts     [根模块路由]
		├── typings.d.ts              [第三方插件变量声明]
	├── assets                 	[资源文件]
		├── i18n                 		[多语言]
		├── icon                 		[图标]
		├── iconfont                  [字体图标]
		├── img                 		[图片]
	    ├── libs                 		[第三方资源库]
    	├── style                     [自定义样式]
    ├── theme                 	[ionic主题] 
        ├── variables.scss           [ionic主体色变量,勿修改]
    ├── environments              [各环境信息] 
    ├── global.scss               [scss import,只做引入,勿单独编写scss代码]  
	├── index.html                [入口HTML] 
	├── karma.conf.js             [Karma单元测试配置] 
	├── main.ts                 	[应用主要入口点]
	├── polyfills.ts              [腻子脚本]  
	├── test.ts                 	[单元测试主要入口点]  
	├── tsconfig.app.json         [TypeScript配置文件]  
	├── tsconfig.spec.json        [TypeScript配置文件]          
├── .gitignore                 	[git提交忽略信息]      
├── angular.json               	[angular配置信息]    
├── ionic.config.json          	[ionic配置信息] 
├── package.json               	[npm依赖管理]      
├── package-lock.json          	[npm依赖版本管理]  
├── README.md              	 	[工程说明文档]  
├── tsconfig.json              	[TypeScript配置文件]
├── tslint.json              		[额外的Linting配置]            

三、环境安装

1、要求环境

[email protected]
[email protected]
ionic&typescript&angular/cli 最新版即可

2、node安装,参考官网

node - v 		# 显示当前Node.js的版本
npm -v			# 显示当前npm的版本

3、安装ionic环境

npm install -g ionic

4、安装typescript

npm install -g typescript

5、安装 Angular CLI

npm install -g @angular/cli
ng version

6、安装Cordova环境

npm install -g [email protected]

四、通用配置

1、【自行配置】WebStorm Editor - Code Style下调整JavaScript、TypeScript、SCSS、sass、html的Tab Size、Indent、Continuation indent的值,统一调整为2

2、【工程已做】在angular.json文件下的build和serve目录下,新增uat的内容,以支持uat环境

3、【工程已做】在theme/variables.scss下,将primary主题色调整为Link基础色 #20A6FC

五、运行说明

1、安装依赖

npm install

2、运行开发环境【DMS/Marketing共用】

npm run dev 

3、运行DMS测试环境

npm run dms:uat 

4、运行DMS正式环境

npm run dms:prod

5、运行Marketing测试环境

npm run marketing:uat 

6、运行Marketing正式环境

npm run marketing:prod  

7、编译DMS测试环境-android

npm run build:dms:uat:android

8、编译DMS测试环境-ios

npm run build:dms:uat:ios

9、编译DMS正式环境-android

npm run build:dms:prod:android

10、编译DMS正式环境-ios

npm run build:dms:prod:ios

11、编译Marketing测试环境-android

npm run build:marketing:uat:android

12、编译Marketing正式环境-ios

npm run build:marketing:prod:ios

13、编译Marketing测试环境-android

npm run build:marketing:uat:android

14、编译Marketing正式环境-ios

npm run build:marketing:prod:ios

六、开发说明

1、基础编码规范【重点,重点,重点!!!】

1.1、变量命名使用驼峰命名规范,不允许出现模糊不清的变量名称,且无相关注释
1.2、文件夹/文件如果需要Link前缀标识,则均使用lnk,如果lnk-list
1.3、文件夹/文件命名格式均采用中划线间隔,如: account-item,包括使用CLI
1.4、所有封装的ionic api reference方法应尽量维护到lnk-service/ionic-api中,特殊情况除外,如
ionic popover/modal等,此类api存在较多复杂业务场景
可在各自模块独立使用
1.5、弹框提示信息基本情况下均使用ionicApiService.alert,只特殊场景,如检测网络变化等,可使用toast
ionicApiService.alert('hello')                // 一般信息
ionicApiService.alert('hello', 'error')      // 错误信息
1.6、所有封装的ionic native api方法都尽量维护到lnk-service/ionic-native下,其中简单的维护在base-native.service,复杂的则单独开service编写
1.7、代码注释说明【非常重要!!!】
1.7.1 参数、核心逻辑代码必须有相应注释说明,格式上应尽量保证同一块代码注释齐整
1.7.2 ts文件头应注明该文件描述、作者、时间,对于标准组件等,还应注释使用样例,简单如下:
    /**
     * 缓存服务对象,提供标准的缓存服务方法
     * @author ouyangzhenqiang
     * @date 2018/10/25
     */
1.7.3 文件头注释的位置应处于装饰器(如component)与import之间,只与import保持一行间距
1.7.4 方法头应注明功能描述、作者、时间、参数等,简单如下: 	 
    /**
     * 根据输入的key移除指定的数据
     * @author ouyangzhenqiang
     * @date 2018/10/25
     * @param key 缓存key
     */
1.7.5 方法注释应只与上一块功能代码(如方法)保持一行间距
1.7.6 可在WebStorm设置live template,便捷生成注释模版【操作请百度或询问他人】
1.7.7 间距等格式问题可使用WebStorm->Code->Reformat Code进行调整
1.8、build目录下的命令切勿随意变更,若需变更,开发人员如需更改,需要在沟通群说明
1.9、发起http请求,应该使用lnk-service/http/http.service,其简单处理了get、post请求
2.0、对于定义成应用启动时执行的方法,应该往lnk-service/init-app/init-app.service服务靠
2.1、需要使用LocalStorage,应用统一使用lnk-service/local-storage/local-storage.service
2.2、日志输出均引用lnk-service/log/log.service,按具体情况使用其中的log/info/warn/error方法,同时需要注意使用try catch以更好控制日志输出
2.3、调用lnk-service/ionic-api下的alert提示错误信息时,需要指定level参数,设置为error,以保证正式环境捕捉错误信息,如
this.ionicApiService.alert(`init app fail,fail reason => ${error}`, 'error');
2.4、路由服务均使用lnk-service/route/route.service
跳转页面
    routeService.push('/account', {});
返回
    routeService.back();
toolab返回按钮默认使用
    <lnk-back-button></lnk-back-button>
2.5、涉及应用层的定时方法,尤其是与http相关的,应维护在lnk-service/workflow/workflow.service
2.6、css编写说明:
1. global.scss只做scss文件import,不可在此处单独编写scss;
2. theme/variables.scss为inoic自带主题色,可作为变量引入,不可在此处单独编写scss变量;
3. assets/style为自定义样式目录,所有自定义样式均在此处编写
   若为变量或mixin,则需额外注意如下三点:
    1. common.mixin.scss为全局公用变量;
    2. dms.mixin.scss为dms专用;
    3. marketing.mixin.scss为marketing专用;
   若为全局css样式,则需额外注意如下三点:
    1. common.style.scss为全局公用css样式;
    2. dms.style.scss为dms专用;
    3. marketing.style.scss为marketing专用;

2、创建模块

ng g module your-module-name

3、创建组件【通用组件统一生成在app/lnk-component目录下,业务组件生成在app-dms或app-marketing目录下,如果是service单独依赖的组件,就直接放在service同级目录】

3.1、创建通用抽象组件【export:自动配置导出】
ng g component lnk-component/your-component-name --m=lnk-component --export 
3.2、创建全局组件,如果login、version等等游离于业务模块之外的顶层组件
ng g component app-component/your-component-name
3.3、创建dms业务组件【****代表app-dms目录下的实际业务目录】
ng g component app-dms/****/your-component-name --m=app-dms
3.4、创建marketing业务组件【****代表app-marketing目录下的实际业务目录】
ng g component app-marketing/****/your-component-name --m=app-marketing

4、创建管道【管道均生成在app/lnk-pipe/目录下】

ng g pipe lnk-pipe/your-pipe-name/your-pipe-name --export
* 注意:管道无需import,管道模块已将所有模块exports,直接在html中使用即可

5、创建指令【指令均生成在app/lnk-directive/目录下】

ng g directive lnk-directive/your-directive-name/your-directive-name --m=lnk-directive --export

6、创建对象【多单词下,类名均采用中划线分割】

ng g class user

7、创建service【service均生成在app/lnk-service/目录下】

ng g service lnk-service/your-service-name/your-service-name

七、Cordova工程创建及编译【optional】

1、初始化DMS测试工程

cd build/dms
./init.uat.sh

2、编译DMS测试工程

cd build/dms
./build.uat.sh

3、初始化DMS正式工程

cd build/dms
./init.prod.sh

4、编译DMS正式工程

cd build/dms
./build.prod.sh

5、初始化营销助手测试工程

cd build/marketing
./init.uat.sh

6、编译营销助手测试工程

cd build/marketing
./build.uat.sh

7、初始化营销助手正式工程

cd build/marketing
./init.prod.sh

8、编译营销助手正式工程

cd build/marketing
./build.prod.sh

八、多语言配置【当前工程已支持多语言,无需再行配置,模版仅在LoginComponent使用】

1、安装 ngx-translate模块包

npm install @ngx-translate/[email protected] --save
npm install @ngx-translate/http-loader --save

2、创建i18n语言文件,在assets/下新建i18n目录,分别新建en.json(英文)和zh.json(中文)

3、app.module.ts 导入多语言模块

import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { HttpClientModule, HttpClient } from '@angular/common/http';
export function createTranslateHttpLoader(http: HttpClient) {
	return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
@NgModule({
...
imports: [
...
    TranslateModule.forRoot({
        loader:{
        provide:TranslateLoader,
        useFactory:(createTranslateHttpLoader),
        deps:[HttpClient]
        }
    })
],
...
})

4、子模块配置:如果采用了angular的子模块懒加载功能的话,则需要对子模块也进行配置【注意是forChild】

@NgModule({
...
imports: [
...
    TranslateModule.forChild({
        loader:{
        provide:TranslateLoader,
        useFactory:[createTranslateHttpLoader],
        deps:[HttpClient]
        }
    })
],
...
})

5、在组件中使用

5.1、ts文件使用translateService服务
import { TranslateService } from '@ngx-translate/core';
constructor(
	private translateService: TranslateService
) { }

ngOnInit() {
	// --- set i18n begin ---
	// 添加语言支持
	this.translateService.addLangs(['zh', 'en']);
	// 设置默认语言,一般在无法匹配的时候使用
	this.translateService.setDefaultLang('en');
	// 获取当前浏览器环境的语言,比如en、 zh
	const browserLang = this.translateService.getBrowserLang();
	this.translateService.use(browserLang.match(/zh|en/) ? browserLang : 'zh');
	// --- set i18n end ---
	// 订阅语言切换事件
	this.translateService.onLangChange.subscribe((params) => {
  		console.log(params);
	});
}
5.2、html中使用
<div class="login-button">
	<ion-button color="secondary" (click)="login()">{{'login' | translate}}</ion-button>
</div>
5.3、ts中使用转换
this.translateService.get('app.changeLangTips', {lang: changeLang});
lang 为预置参数

九、关于DMS工程与营销助手工程合并

1、合并之后工程将主要分为如下几部分:

* 应用入口【AppModule&AppComponent】
* 应用层组件【app-component】,存储游离于具体业务之外的组件,如login、version等组件
* 通用配置和方法【app-basic】,存储公共对象、方法、配置等信息
* 通用抽象组件【lnk-component】,存储抽象出来的标准可复用组件,如list等组件
* 通用抽象指令【lnk-directive】,存储抽象出来的标准可复用指令
* 通用抽象管道【lnk-pipe】,存储抽象出来的标准可复用管道即过滤器
* 通用抽象服务【lnk-service】,存储抽象出来的标准可复用服务
* 经销商业务模块【app-dms】
* 营销助手业务模块【app-marketing】

2、为同时兼容两个应用,将在两处地方做用户类型的判断,以跳转不同应用模块:

2.1、在src/app/lnk-service/init-app/init-app.service.ts中,对token和用户判断,以实现应用初始化时,若token在有效期内则自动登录,且根据用户类型登录不用业务应用模块
2.2、在src/app/app-component/login组件中,对登录成功之后的用户,进行用户类型判断,以判断跳转业务应用模块

3、为使DMS工程和营销助手工程能够各自打包,整体工程做了如下三处改造:

* 在build、codorva下配置了各自原生工程所属的脚本和文件
* 在environment.ts和angular.json配置了各自所需的环境信息
* 在package.json中配置各工程的启动命令

十、关于通用组件的使用方式,特提供了相应的部分说明文档,如有需要可参考

Link移动端开发所使用的标准组件以及标准服务说明

十一、Cordova工程异常问题汇总

1、安卓工程编译报appcompat-v7-23.4.0.aar资源问题【init脚本已配置】

build.gradle 追加
configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:27.1.0'
    }
}

2、极光插件3.4.6版本支持cordova android 7.0.0以下版本【init脚本已配置】

将android/app/src/main/java下的cn.jiguang.*拷贝到android/src/目录下
将android/jniLibs下的arm64-v8a、armeabi、armeabi-v7a、x86、x86_64下的libjcorexxx.so,拷贝到android/libs/对应目录下

2、xcode 10 工程debug报libstdc++.6.0.9.tbd和libstdc++.6.tbd不存在 【若为xcode 10,则自行处理】

下载此两项文件,拷贝至Xcode ▸ Contents ▸ Developer ▸ Platforms目录下的iPhoneOS.platform和iPhoneSimulator.platform
下的Developer ▸ SDKs ▸ xxxx.sdk下的usr ▸ libs

十二、踩坑

……