Code Monkey home page Code Monkey logo

nei-toolkit's People

Contributors

abnerzheng avatar amibug avatar eynol avatar fy1994 avatar genify avatar huntbao avatar icy0307 avatar kkdev163 avatar nailperry-zd avatar pennysu avatar potato47 avatar reditaru 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

nei-toolkit's Issues

构建iOS工程增加 productName 参数

新增加的 productName 参数,默认为 null,必须指定,否则直接报错退出。具体实现过程如下:

  1. 如果 --project 的值为空,则将它的值设置为 ./{{productName}},相对于模板工程目录。如果命令行中有 --project 参数,则优先使用命令行中的值,此时的路径也是相对于模板工程目录。
  2. resOut 的值更改为 ./{{productName}}/{{resOut}},即在它前面追回 productName 的值
  3. 模板数据中的 ProductName 修改为相应的值

空白工程要做的修改:

在 iOS 工程模板中,需要将 --project 设置为空,resOut 参数不要包含 productName 的路径。模板数据文件(NEIKey.json)中的 ProductName 设置为空。build.json 文件内容参考如下:

{
    "t": "mobile",
    "l": "oc",
    "w": true,
    "p": "",
    "tp": "HTSingleView/",
    "tdp": "NEIKey.json",
    "resOut": "Common/Network/"
}

iOS端改进需求: 生成Model代码时,希望允许指定Model类的后缀

需求描述:

  1. 生成Model代码时,希望允许指定Model类的后缀,如Model; 例如,nei网站上类型为Person, 前缀为HT, 可以指定在命令中通过参数指定后缀为Model, 则生成的数据类型为HTPersonModel
  2. 在第一点的基础上,如果网站定义的数据类型名后缀默认不是Model或者Object, 则加上Model; 即如果nei网站上类型为Person, 那么默认生成为HTPersonModel; 如果类型为PersonModel或者PersonObject, 则不额外添加Model作为后缀,生成的类名为HTPersonModel或者HTPersonObject. 第2个功能实现时尽量做成可开关的;因为不确定所有人都希望默认加Model后缀。

nei server

本地容器需要如何创建 ?返回404

手动设置工程的默认生成ftl文件

因为现在做的工程是后来才引入nei的,所以直接update生成的新的ftl文件和原来的页面配置有些冲突,每次都需要手动再去改ftl,所以希望针对每个工程能自己配置生成的ftl、js文件么~~

为什么不提供RPC接口文档管理的功能

如题,现在只支持HTTP接口的管理,为什么不提供对诸如RPC服务的接口管理呢?
一般而言,对于RPC服务,我们会希望该管理系统提供以下管理:(当然其他的可以再补充)
(1)服务接口
(2)供外部调用的服务名称
(3)接口参数,包括请求参数和相应参数;对于Java来说,就是一个request和response 类,能够管理这两个类包含哪些参数,什么类型。

iOS: nei mobile解析Cocoapods 0.39版本更改后的工程文件出错

步骤:

  1. 使用nei build构建工程
  2. 使用Cocoapods 0.39执行pod install命令安装第三方库
  3. 使用nei mobile命令更新网络请求代码

此时会报错:

/usr/local/lib/node_modules/nei/node_modules/xcode/lib/parser/pbxproj.js:1835
      throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);
      ^
SyntaxError: Expected "/*", "//" or "{" but "<" found.

原因是由于Cocoapods 0.39安装之后,更改了工程文件的格式,但对于部分工程,并不会出现该问题,原因未知;初步推断是Cocoapods 的bug,暂时不需要nei tookit作相应更改。

出错的工程文件见附件.
TestPods.xcodeproj.zip

生成iOS客户端请求代码时请求类名规则优化

当前规则

生成的接口类名如下:{{namePrefix}}{{接口类名}}

例如:NEI 上的接口类名为 CommentRequest,则生成的类型名字 HTCommentRequest, 头文件名为 HTCommentRequest.h, 实现文件名为 HTCommentRequest.m

调整

  1. 如果NEI上的接口类名后缀不为RequestTask, 则自动添加后缀Request
    例如:NEI 上的接口类名为 Comment,则生成的类型名字仍为 HTCommentRequest, 头文件名为 HTCommentRequest.h, 实现文件名为 HTCommentRequest.m
  2. 如果NEI上的接口类名不合法,例如含有中文等等;在按照URL路径生成请求类的同时需要在日志中给出警告,便于开发人员排查问题。

nei iOS 配置出错

/usr/local/lib/node_modules/nei/lib/nei/builder.js:472
if (this.config.jarRoot || this.spec.jarConfig.length > 0) {
^

TypeError: Cannot read property 'length' of undefined
at Builder.buildServerConfig (/usr/local/lib/node_modules/nei/lib/nei/builder.js:472:55)
at new Builder (/usr/local/lib/node_modules/nei/lib/nei/builder.js:77:18)
at loadedHandler (/usr/local/lib/node_modules/nei/main.js:46:13)
at _io.download.ex (/usr/local/lib/node_modules/nei/main.js:178:13)
at IncomingMessage. (/usr/local/lib/node_modules/nei/lib/util/io.js:178:17)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
请问这个问题是怎么引起的么?

【v3.5.2 发布】注入给页面的模型数据,可以从指定的服务器获取

在渲染页面的时候,页面中的模型数据可以从指定的服务器获取,在 server.config.js 中配置 modelServer 参数选项即可:

modelServer: {
  host: '',
  queries: {},
  headers: {},
  // path: function (options) {
  //
  // }
}

参数说明如下:

  • host:完整的主机地址,包括协议、主机名、端口
  • queries: 查询参数,键值对的形式
  • headers:自定义请求头,键值对的形式
  • path:
    • path 可以是字符串,也可以是函数;默认不用传,即使用 host + 页面path + queries 的值
    • 如果是函数,则使用函数的返回值,传给函数的参数 options 是一个对象,它包含 host、path(页面的path)、queries、headers 等参数
    • 如果 path 的值为假值,则使用 host + 页面path + queries 的值;
    • 如果 path 的值是相对地址,则会在前面加上 host

注意:后端在向目标服务器发送请求的时候,会带上原始请求的 cookie

注意:host 要写完整的地址,比如:http://192.168.10.25:8080/,最后的斜杠也需要

nei生成iOS客户端代码时增加对数组类型的支持

当前nei接口管理平台上,可以直接定义数组类型;但是Objective-C中并没有单独的数组类型,需要转换为NSArray;当前是约定不要直接定义数组类型;而是通过Array的方式来定义数组。

后续希望能增加对数组类型的支持,具体如下:

  1. 如果一个数据类型是数组类型,则不要生成对应的Model头文件与实现文件;
  2. 如果一个数据类型是数组类型,则在嵌套的Model和Request定义中替换为原有的定义;

例如定义了一个数组类型StringList
default

那么在Model和请求中,如果遇到类型StringList, 那么生成的Objective-C代码应该是

@property (nonatomic, strong) NSArray<NSString *> *dataList;

而不是

@property (nonatomic, strong) StringList *dataList;

添加自定义辅助函数

规范中的文件可以标识为“模板引擎的辅助函数”,构建工具识别出该文件后,可以通过 vm 模块执行脚本

运行server命令出错

运行
nei server -k cec47ff7e9d51d1db545f4af92362866 -o ./todoweb
出现报错:

/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/node_modules/serve-static/index.js:40
    throw new TypeError('root path required')
    ^

TypeError: root path required
    at Function.serveStatic [as static] (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/node_modules/serve-static/index.js:40:11)
    at Object.Server.init (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/lib/server/main.js:82:31)
    at Object.Server (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/lib/server/main.js:18:10)
    at module.exports (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/lib/server/server.js:72:18)
    at tryStartServer (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/main.js:103:17)
    at Main.server (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/main.js:125:13)
    at Args.options.server (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/bin/nei.js:43:14)
    at emitOne (events.js:96:13)
    at Args.emit (events.js:188:7)

请问该怎么解决?

nei build构建iOS工程时报错

在build.json同目录下执行命令如下:

nei build 11321 -c build.json --productName HTTestPluginDemo --namePrefix HTP --Prefix HTP --CategoryPrefix htp

错误如下:


HTExample/HTTestPluginDemo/HTTestPluginDemo/Network/Requests/HTPRequests.h
/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.pbx.js:25
        group.children.forEach((file) => {
             ^

TypeError: Cannot read property 'children' of undefined
    at PbxProj.removeGroupFiles (/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.pbx.js:25:14)
    at PbxProj.createPBXGroupByFullPath (/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.pbx.js:145:18)
    at PbxProj.update (/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.pbx.js:240:18)
    at MobileOCBuilder.modelStart (/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.js:399:25)
    at MobileOCBuilder.buildStart (/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.js:427:26)
    at MobileOCBuilder.start (/usr/local/lib/node_modules/nei/lib/nei/builder.js:519:14)
    at MobileOCBuilder.build (/usr/local/lib/node_modules/nei/lib/nei/mobile.js:196:19)
    at loadData (/usr/local/lib/node_modules/nei/main.js:124:28)
    at _io.download (/usr/local/lib/node_modules/nei/main.js:37:17)
    at IncomingMessage.<anonymous> (/usr/local/lib/node_modules/nei/lib/util/io.js:176:17)

nei build 增加自动安装 bower 依赖的参数

从 v0.3.8 开始,在使用 nei build 命令构建 WEB 工程时,可以使用 --bower 参数自动安装 bower 依赖。

注意: windows 下面貌似会报权限错误:

events.js:141
      throw er; // Unhandled 'error' event
      ^
Error: spawn bower ENOENT
    at exports._errnoException (util.js:874:11
    at Process.ChildProcess._handle.onexit (in
    at onErrorNT (internal/child_process.js:34
    at doNTCallback2 (node.js:439:9)
    at process._tickCallback (node.js:353:17)

所以还是需要手动安装

内置本地模拟容器

和 nei 配套使用的本地模拟容器 Puer 功能虽然强大,但依赖的包较多,安装时经常会失败。

为此,nei 计划推出一个轻量级的本地模拟容器,集成在 nei 工具中,通过 nei server 命令启动,满足 nei 的需求即可。

请大家拭目以待。

iOS 客户端代码Request生成规则调整

iOS客户端代码Request生成规则需要作如下调整:

  1. 原规则中,request的实现文件中固定包含头文件 #import "NSObject+HTModel.h", 现需更改为#import "HTNetworking.h"
  2. 原规则中,responseMapping 方法返回:[{{namePrefix}}{{自定义类型名}} defaultResponseMapping]更改为 responseMapping 方法返回:[{{namePrefix}}{{自定义类型名}} ht_modelMapping]

修改原因:

  1. 同nei配套使用的网络库HTNetworking为了支持CocoaPods 0.39,头文件路径作了调整;因此开放出HTNetworking.h以引入其他头文件;自动生成的代码尽量直接包含该头文件;
  2. 使用者指定Model的基类不为HTHTTPModel时,方法defaultResponseMapping不可用。

注意事项:
由于HTNetworking头文件路径的修改不会对老版本生效,因此上述规则的修改应当仅应用于新版本的构建工具,保证老版本的构建工具生成的代码仍然可使用老版本的网络库.

异步接口数据类型

期望的数据类型为:

{
    code: number,
    data: object,
    msg: string
}

但是选择 '导入JSON' 后, data 类型变为 string。请问怎么设置为 Object 类型.
2017-02-13 14 01 39

nei构建iOS工程后,模板文件夹中文件的可执行属性丢失

在模板文件中添加一个可执行的脚本文件,例如CopyMockFiles.sh; 利用nei build命令生成工程后,该文件的可执行属性丢失,执行脚本会报错 "Permission denied".

之前的文件属性为“-rwxrwxrwx”; 生成后的文件属性为"-rw-r--r--"

期望: 可执行的脚本文件在工程生成工程中,可执行属性不丢失,这样可以在工程模板中添加执行脚本的步骤。

nei构建mobile工程时默认不需要--resOnly参数

利用nei构建mobile工程时,有一个可选项,配置是否将模板文件夹下的文件添加到Xcode工程即.xcodeproj文件中;

原有逻辑如下:

  1. 默认情况下,不添加额外参数:将模板文件夹下的文件添加到Xcode工程中;
  2. 添加--resOnly参数:不将模板文件夹下的文件添加到Xcode工程中;

但实际情况中,一般不需要“将模板文件夹下的文件添加到Xcode工程中;”,这样每次都要加--resOnly参数变得难以理解;

因此,希望将处理逻辑变更如下:

  1. 默认情况,不添加额外参数:不将模板文件夹下的文件添加到工程中;
  2. 添加额外参数--updateProject: 将模板文件夹下的文件添加到工程中;

反馈个问题

接口测试->接口列表 不能滚动 导致很多接口看不到了

nei枚举类型区分字符串还是整型

当前nei接口管理平台对于枚举类型都当作字符串来处理,iOS客户端使用起来没有那么方便;但是由于Objective-C的枚举NSEnum无法描述字符串,所以希望接口描述里面可以有办法区分是字符串还是整型。对于字符串,仍然按照原有规则生成;对于整型,后续期待可以生成类似如下的代码:

typedef NS_ENUM(NSInteger, {{namePrefix}}{{类型名}}) {
    {{namePrefix}}{{类型名}}{{枚举的 key1}} = {{枚举的 key1 的值}},  // {{枚举的key1的描述}}
     {{namePrefix}}{{类型名}}{{枚举的 key2}} = {{枚举的 key2 的值}},  // {{枚举的key2的描述}}
     {{namePrefix}}{{类型名}}{{枚举的 key3}} = {{枚举的 key3 的值}},  // {{枚举的key3的描述}}
};

install ht-templates Operation timed out

安装nei-tooket一切正常,接着安装ht-templates报错:

Cloning into '/Applications/Android Studio.app/Contents/plugins/android/lib/templates/activities/HTTemplate'...
fatal: unable to access 'https://g.hz.netease.com/hearttouch-android/ht-template.git/': Failed to connect to g.hz.netease.com port 443: Operation timed out
ls: /Applications/Android Studio.app/Contents/plugins/android/lib/templates/activities/HTTemplate: No such file or directory

ping https://g.hz.netease.com没问题
环境:
OS X, 10.12.3
Android Studio 2.3
Build #AI-162.3764568, built on February 24, 2017
JRE: 1.8.0_112-release-b06 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o

nei构建iOS工程时对参数namePrefix的统一处理

当前nei构建工程时,对于文件前缀存在三个参数进行描述:

  1. 命令行或者build.json中通过参数--namePrefix指定的网络请求前缀;如果不指定,默认为HT;
    2.NEIKey.json中指定的模板替换规则"Prefix":"XYZ"会将工程模板中的{{Prefix}}替换成为指定的字符串
  2. NEIKey.json中指定的模板替换规则"CategoryPrefix":"xyz"会将工程模板中的{{CategoryPrefix}}替换成为指定的字符串。

使用者在构建自己的工程时,需要指定以上三个参数才可以正确生成自己想要的工程,不便于使用;因此希望toolkit改进如下:

  1. NEIKey.json中不再需要指定Prefix或者CategoryPrefix
  2. 即使在NEIKey.json中指定了Prefix或者CategoryPrefix, 一概忽略;
  3. 通过--namePrefix传递的参数默认替换掉{{Prefix}}, 并且以小写形式替换掉{{CategoryPrefix}}; 则用户只需要传递一个参数.
  4. 如果没有传递--namePrefix参数,直接报错,不继续执行。
  5. nei mobile命令如果没有传递--namePrefix参数,也直接报错,不继续执行;即不再提供默认的HT前缀;

参数名可以保持为namePrefix, 也可以统一替换为prefix或者Prefix

例如:

--namePrefix HTE, 则使用HTE替换掉模板文件中的{{Prefix}}, 使用hte替换掉模板文件中的{{CategoryPrefix}}.

nei build在windows下生成jtr.js中使用相对路径错误的问题

nei build 指定--webroot --viewroot 为nei -p 不同盘符下的路径时,生成的jtr.js中 webroot、viewroot、mockTpl、mockApi 使用相对路径寻址错误。
例如:

  • 工作目录为:C:\Users\hzwenjinlu
  • 执行的nei build命令为:nei instal 11934 -t webapp --webRoot "D:\neteasecode\nyx\nyx-web\src\mai
    n\webapp" --viewRoot "D:\neteasecode\nyx\nyx-web\src\main\webapp\WEB-INF\ftl\h5"

生成后的jtr.json文件中目录解析错误如下:

/* 根目录 */
webRoot: path.join(__dirname, 'D:/neteasecode/nyx/nyx-web/src/main/webapp/'),
/* 视图目录 */
viewRoot: path.join(__dirname, 'D:/neteasecode/nyx/nyx-web/src/main/webapp/WEB-INF/ftl/h5/'),
/* 同步模块mock数据路径 */
mockTpl: path.join(__dirname, '/D:/neteasecode/nyx/nyx-web/src/main/webapp/WEB-INF/ftl/h5/mock/'),
/* 异步接口mock数据路径 */
mockApi: path.join(__dirname, '/D:/neteasecode/nyx/nyx-web/src/main/webapp/src/mock/')

使用nei server命令启动测试服务器,访问页面地址报错如下:

访问了 ----> GET /product/list
Failed to lookup view "./booking/productlist.ftl" in views directory "C:\Users\h
zwenjinlu\nei.11934\D:\neteasecode\nyx\nyx-web\src\main\webapp\WEB-INF\ftl\h5"

若切换工作目录,执行相同命令后

  • 工作目录为:D:\nei
  • 执行的nei build命令为:nei instal 11934 -t webapp --webRoot "D:\neteasecode\nyx\nyx-web\src\mai
    n\webapp" --viewRoot "D:\neteasecode\nyx\nyx-web\src\main\webapp\WEB-INF\ftl\h5"

生成后的jtr.json文件中目录解析如下:

/* 根目录 */
webRoot: path.join(__dirname, '../../neteasecode/nyx/nyx-web/src/main/webapp/'),
/* 视图目录 */
viewRoot: path.join(__dirname, '../../neteasecode/nyx/nyx-web/src/main/webapp/WEB-INF/ftl/h5/'),
/* 同步模块mock数据路径 */
mockTpl: path.join(__dirname, '/../../neteasecode/nyx/nyx-web/src/main/webapp/WEB-INF/ftl/h5/mock/'),
/* 异步接口mock数据路径 */
mockApi: path.join(__dirname, '/../../neteasecode/nyx/nyx-web/src/main/webapp/src/mock/'),

再次命令 nei server 启动访问同样的页面地址打开正常。

检查代码lib/nei/webapp.js 中方法buildServerConfig ,计算webRoot 等目录值时取的是相对项目目录的相对路径。所以,建议:

  1. 要么修改代码兼容windows下指定不同盘符目录的情况
  2. 要么在文档中增加说明windows下项目目录和webroot、viewroot、mockTpl、mockApi必须为同盘符下的目录

产品使用统计

NEI团队要汇报上半年的工作了,求赞美,求批评,大家的反馈是我们团队前进的动力,谢谢各位先。

大家的反馈对NEI产品本身的走向有非常大的影响哦,有什么想说的话,尽管给我们团队留言吧。

反馈格式如下(有不方便透露的信息空着即可):

你们的公司及行业:
你们的产品是什么:
你的角色是(前端、后端等):
你们是通过什么渠道知道NEI的:
你们主要在使用NEI的什么功能:
你们还希望NEI提供什么样的功能:
使用了NEI后对你们的开发效率有多大提升:
其他想对NEI产品团队说的话(赞美和批评等):

改进:希望nei build生成新的iOS工程时不需要去更改build.json文件

当前build.json文件为

{
    "t": "mobile",
    "l": "oc",
    "w": true,
    "p": "../Stone",
    "tp": "./HTTemplate",
    "resOut": "Stone/Network/", 
    "tdp": "./NEIKey.json"
}

Stone实际上可以替换为一个命令行传递的参数ProductName, 这个ProductName也可以用于NEIKey.json中的模板化过程,这样,使用同样的模板文件夹生成新的工程时,不需要去修改build.json文件,可以简化使用。

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.