Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V4 Next Big Version #3143

Closed
11 of 12 tasks
yutingzhao1991 opened this issue Dec 14, 2018 · 92 comments
Closed
11 of 12 tasks

V4 Next Big Version #3143

yutingzhao1991 opened this issue Dec 14, 2018 · 92 comments
Assignees

Comments

@yutingzhao1991
Copy link
Contributor

yutingzhao1991 commented Dec 14, 2018

For make Ant Design Pro more flexible, we plan to start the 4th version (Why not 3, because of @chenshuai2144 don't like it).
In the long-term maintenance, we found that the biggest problem with pro is that it is not pluggable. Next, our focus will make him more flexible.

More TodoLIst:

  • init v4 branch V4 branch init #3357
  • sync master commit to v4
    • revert: simplify antd-pro's boilerplate
    • revert: remove SettingDrawer
    • more
@yesmeck
Copy link
Member

yesmeck commented Dec 14, 2018

TypeScript!

@zwl1619
Copy link

zwl1619 commented Dec 14, 2018

帅,就是任性

@chenshuai2144 chenshuai2144 changed the title v4 plan V4 Next Big Version Dec 15, 2018
@chenshuai2144 chenshuai2144 pinned this issue Dec 15, 2018
@crashsol
Copy link

type script太重要了,大大的支持

@panw3i
Copy link

panw3i commented Dec 17, 2018

麻烦多写点注释,弱类型真的很难猜

@sorrycc
Copy link
Contributor

sorrycc commented Dec 18, 2018

typescript 还是不要了吧,用 antd-pro 必须先学 typescript 对很多初学者成本会比较高。

@crashsol
Copy link

不会吧,现在typescript不是都是前段开发标配了么,并且上手难度也不高啊,收益大于弊

@yesmeck
Copy link
Member

yesmeck commented Dec 18, 2018

用 TypeScript 可以编译到 ES6,新手可以用 ES6 的版本。

@sorrycc
Copy link
Contributor

sorrycc commented Dec 18, 2018

@yesmeck 编译出的 es6 可读性如何?
@crashsol 有很多非专业前端的用户的。

@crashsol
Copy link

其实我也不是专业前端,主要还是写后端,强类型的使用,能让后端的人更好的适应,前段时间使用NG-ZOORO,感觉就舒服,配合swagger生成的HTTP代理和DTO类,注释,节省很多事情。毕竟现在都推荐使用TS,希望大佬考虑一下呢 @sorrycc

@yesmeck
Copy link
Member

yesmeck commented Dec 18, 2018

编译到 ES6 基本上只是把类型去掉而已,其他不会有什么变化。

@yutingzhao1991
Copy link
Contributor Author

看上去如果能够编译到 ES6 的话似乎不错,这样就大家都有得选了。

@yutingzhao1991
Copy link
Contributor Author

再补充一个 init-cli 的功能,开发者应该用这个 cli 来初始化 pro 的项目,而不是直接使用 github 上的源代码,该工具应该做如下的事情:

  • 选择是否要去掉 firebaserc 这些 pro 官方的部署相关代码
  • 选择需要初始化添加的区块(页面)
  • 选择是否需要国际化
  • 选择是使用 ts 还是 es6

@redclown
Copy link

请问这个大概需要多长时间推正式版,正打算用pro~

@chenshuai2144
Copy link
Collaborator

你可以直接使用的

@sorrycc
Copy link
Contributor

sorrycc commented Dec 18, 2018

when.ts

import {
    $mobx,
    IReactionDisposer,
    Lambda,
    autorun,
    createAction,
    fail,
    getNextId
} from "../internal"

export interface IWhenOptions {
    name?: string
    timeout?: number
    onError?: (error: any) => void
}

export function when(
    predicate: () => boolean,
    opts?: IWhenOptions
): Promise<void> & { cancel(): void }
export function when(
    predicate: () => boolean,
    effect: Lambda,
    opts?: IWhenOptions
): IReactionDisposer
export function when(predicate: any, arg1?: any, arg2?: any): any {
    if (arguments.length === 1 || (arg1 && typeof arg1 === "object"))
        return whenPromise(predicate, arg1)
    return _when(predicate, arg1, arg2 || {})
}

function _when(predicate: () => boolean, effect: Lambda, opts: IWhenOptions): IReactionDisposer {
    let timeoutHandle: any
    if (typeof opts.timeout === "number") {
        timeoutHandle = setTimeout(() => {
            if (!disposer[$mobx].isDisposed) {
                disposer()
                const error = new Error("WHEN_TIMEOUT")
                if (opts.onError) opts.onError(error)
                else throw error
            }
        }, opts.timeout)
    }

    opts.name = opts.name || "When@" + getNextId()
    const effectAction = createAction(opts.name + "-effect", effect as Function)
    const disposer = autorun(r => {
        if (predicate()) {
            r.dispose()
            if (timeoutHandle) clearTimeout(timeoutHandle)
            effectAction()
        }
    }, opts)
    return disposer
}

function whenPromise(
    predicate: () => boolean,
    opts?: IWhenOptions
): Promise<void> & { cancel(): void } {
    if (process.env.NODE_ENV !== "production" && opts && opts.onError)
        return fail(`the options 'onError' and 'promise' cannot be combined`)
    let cancel
    const res = new Promise((resolve, reject) => {
        let disposer = _when(predicate, resolve, { ...opts, onError: reject })
        cancel = () => {
            disposer()
            reject("WHEN_CANCELLED")
        }
    })
    ;(res as any).cancel = cancel
    return res as any
}

when.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const internal_1 = require("../internal");
function when(predicate, arg1, arg2) {
    if (arguments.length === 1 || (arg1 && typeof arg1 === "object"))
        return whenPromise(predicate, arg1);
    return _when(predicate, arg1, arg2 || {});
}
exports.when = when;
function _when(predicate, effect, opts) {
    let timeoutHandle;
    if (typeof opts.timeout === "number") {
        timeoutHandle = setTimeout(() => {
            if (!disposer[internal_1.$mobx].isDisposed) {
                disposer();
                const error = new Error("WHEN_TIMEOUT");
                if (opts.onError)
                    opts.onError(error);
                else
                    throw error;
            }
        }, opts.timeout);
    }
    opts.name = opts.name || "When@" + internal_1.getNextId();
    const effectAction = internal_1.createAction(opts.name + "-effect", effect);
    const disposer = internal_1.autorun(r => {
        if (predicate()) {
            r.dispose();
            if (timeoutHandle)
                clearTimeout(timeoutHandle);
            effectAction();
        }
    }, opts);
    return disposer;
}
function whenPromise(predicate, opts) {
    if (process.env.NODE_ENV !== "production" && opts && opts.onError)
        return internal_1.fail(`the options 'onError' and 'promise' cannot be combined`);
    let cancel;
    const res = new Promise((resolve, reject) => {
        let disposer = _when(predicate, resolve, Object.assign({}, opts, { onError: reject }));
        cancel = () => {
            disposer();
            reject("WHEN_CANCELLED");
        };
    });
    res.cancel = cancel;
    return res;
}

看了下编译后的代码,虽然可读,但看起来还是有很明显的编译痕迹。

@redclown
Copy link

自己想用哪些功能自己配置,这个很帅,赞赞赞~

@yesmeck
Copy link
Member

yesmeck commented Dec 18, 2018

你这是编译到 es5 了吧,到 es6 是这样的:

import { $mobx, autorun, createAction, fail, getNextId } from '../internal';
export function when(predicate, arg1, arg2) {
  if (arguments.length === 1 || (arg1 && typeof arg1 === 'object'))
    return whenPromise(predicate, arg1);
  return _when(predicate, arg1, arg2 || {});
}
function _when(predicate, effect, opts) {
  let timeoutHandle;
  if (typeof opts.timeout === 'number') {
    timeoutHandle = setTimeout(() => {
      if (!disposer[$mobx].isDisposed) {
        disposer();
        const error = new Error('WHEN_TIMEOUT');
        if (opts.onError) opts.onError(error);
        else throw error;
      }
    }, opts.timeout);
  }
  opts.name = opts.name || 'When@' + getNextId();
  const effectAction = createAction(opts.name + '-effect', effect);
  const disposer = autorun(r => {
    if (predicate()) {
      r.dispose();
      if (timeoutHandle) clearTimeout(timeoutHandle);
      effectAction();
    }
  }, opts);
  return disposer;
}
function whenPromise(predicate, opts) {
  if (process.env.NODE_ENV !== 'production' && opts && opts.onError)
    return fail(`the options 'onError' and 'promise' cannot be combined`);
  let cancel;
  const res = new Promise((resolve, reject) => {
    let disposer = _when(predicate, resolve, { ...opts, onError: reject });
    cancel = () => {
      disposer();
      reject('WHEN_CANCELLED');
    };
  });
  res.cancel = cancel;
  return res;
}

@sorrycc
Copy link
Contributor

sorrycc commented Dec 18, 2018

有没有配置项可以保留空行?

@yesmeck
Copy link
Member

yesmeck commented Dec 18, 2018

没有配置,但是有 workaround microsoft/TypeScript#843

@chenshuai2144
Copy link
Collaborator

编译完之后 prettier 一下,格式就会变得和 ts 的一样

@yutingzhao1991
Copy link
Contributor Author

@redclown v4 的分支预计这周就会拉,会基于 https://github.com/umijs/ant-design-pro 这个,但是 v4 正式发应该要春节前后了,还要一段时间。

@zombieJ
Copy link
Member

zombieJ commented Dec 18, 2018

编译完之后 prettier 一下,格式就会变得和 ts 的一样

试了下,还挺不错的:

$ prettier dist/components/Hello.jsx
import * as React from "react";
export const Hello = props => (
  <h1>
    Hello from {props.compiler} and {props.framework}!
  </h1>
);
//# sourceMappingURL=Hello.jsx.map

@zombieJ
Copy link
Member

zombieJ commented Dec 18, 2018

如果 cli ready,我觉得可以试试

@ylzon
Copy link

ylzon commented Dec 21, 2018

能扩展cli可以配置插件、配置功能、主题然后自动生成一个干净的项目就好了,省了很多修改和删除的功夫才能开始一个新项目,期待v4

@tomgao365
Copy link
Contributor

持续关注中,TypeScript 是一个好的选择

@sorrycc
Copy link
Contributor

sorrycc commented Dec 21, 2018

有没有配置项可以保留空行?

试过 @babel 的 generator 是可以保留空行的,理论上 typescript 也可以。

@CaoMengLong
Copy link

typescript 还是不要了吧,用 antd-pro 必须先学 typescript 对很多初学者成本会比较高。

强烈支持typescript, typescript很简单,学习成本几个小时即可。
期待TypeScript Angular 版本~

@rendongsc
Copy link

还是es6稳妥些!

@ifzm
Copy link

ifzm commented Mar 11, 2019

期待 Follow ...

@xiaopanghhh
Copy link
Contributor

请问一下,基于TypeScript的V4有了发布计划了吗?

@qivhou
Copy link

qivhou commented Apr 11, 2019

发现了pro-blocks的repo,之前忘了在哪个issue里看到antd-pro要专注做block,不知道目前的block定位、粒度如何,是否有roadmap?

在项目选型过程中同时考察了ice和antd-pro,感觉从设计语言、antd本身的组件库以及antd-pro提供的完整脚手架这几点,从代码(技术)层面上antd-pro更适合目前的需求。

但是有一个别扭的点是从目前ice的block以及领域模板来看,的确是省去了很多设计的工作,个人感觉ice-works更适合产品经理构建原型、串联需求等非coding工作。所以把ice-works作为pre-coding work感觉更合适,但是这个中间就会存在一个断层,如果整体选择antd-pro作为脚手架,那就需要将目前ice的领域模板或者block用antd或者antd-pro的component进行重写一遍,或者在ice中使用antd-pro定制一个template脚手架。目前没有考虑好如何才能更好的将ice和antd/antd-pro进行搭配使用,是否有建议?

不知道antd/antd-pro团队是否在block甚至基于antd的领域模板上有交流、配合,以及下一步的计划?如果需要构建领域模板的话,感觉社区应该还是有很大贡献力量的,至少个人愿意贡献。

@ypli0629
Copy link

期待 dark theme

@tomgao365
Copy link
Contributor

正式版要是支持多种主题就好了。css in js 貌似可以实现

@poyiding
Copy link

poyiding commented Apr 15, 2019

大部分Pro的用户应该是使用它当项目的架子,配置简单灵活,UI设计好看,这块做好才是重点,区块或者页面其实都是用户自己开发完成。现在的Pro太重了,很多功能只是参考作用,比如权限控制,只能控制用户维度,它不能控制到角色和功能点维度;再比如国际化,需要国际话的用户应该是少数,所以只要提供一个国际化方案就行,而不是默认支持国际化。
至于ts,它很好,大部分用户应该还是没有用它在项目中,应该还是以es6为主,需要ts的同学应该单独有个仓库来支持。从关闭的issue来看,很多比较初级的问题或者用户应该自己能解决的问题都抛出了,说明有很多初级的用户,给你们维护者也增加负担。所以个人觉得应该做这个项目应该是要往精的方向发展,break change 少一点,大家都尽力支持一点。

@soonnyt
Copy link

soonnyt commented Apr 15, 2019

我看历史讨论中,没有从我的利益角度出发的我就写了

用于策反,设计师 -> 产品/项目经理(从“设计选择”到“项目快速构建”)


简单的用户故事:

对于我们吃瓜群众来说,Antd生态的开源代码就是知识消费的产品。

第一个问题:为什么star Antd
回答1:
因为星多就加入了(这个不是我想要表达的重点)
回答2:
1.组件全网最全(隔壁angulr2 Vue的都来偷艺)
2.性能一直在优化(人多力量大,ant团队给力,贡献热血积极)
3.好看符合设计原则(一大堆的交互设计精髓,作为 交互设计师 懒得再写一遍设计标准手册,而且还有现成的和组件配套的设计文件外挂,不用再标记切图,懂的设计师都推荐给PM和PM)
4.其实帮设计师解决的是“终于能跟程序员少交流设计和版式布局问题了”
5.帮PM下定决心的是“这么整- 速度快啊,功能点全好构建,质量好,先进啊,再也不用跟前端因为下拉框问题强调体验细节的重要性了,我选择一个就行了。“

第二个问题:为什么star Antd Pro
回答1:
因为星了Antd再看看Antd Pro是什么就收藏下(这个也不是我想要表达的重点)
回答2:
1.好多个功能页面+布局实现啊,我都不用设计了,说明文档中还说布局都能调整,甩锅给前端简直完美(我在思想中甩给了我的左脑)!
2.终于有时间完善汇报的ppt了。


我的思考:

1.不知道有多少像我一样因为Antd Pro 开始学习React的设计师,在我的角度看来,Antd pro 的发展,其实源于一直被程序员们缩写的“d“——design。
2.Ant团队的design,帮我们实现了快构建、快沟通和美,不用再因为技术细节实现耽误迫在眉睫的功能实现。
3.还有个Antd pro 现成的工程样例,展示页面的功能。快速和标准化解决,后台功能场景和需求实现之坑。(打动设计和PM的难道不是Pro首页的那几个chart?)


建议:

1.用Antd pro 首页的描述“开箱即用的中台前端/设计解决方案”来说明。

“开箱即用”应该是技术保障,“解决方案”才是产品核心体验。

说句戳心窝的话,项目用什么不会因为程序员爽而用(脚手架好什么的...),Antd pro作为“中台前端/设计”的解决方案应该能成为策反设计和PM的工具。

2.用什么策反?
代码的灵活性——能快速的符合需求的更改,只是程序员之间的相互救赎。
质量和稳定性——如果没有测试兄弟帮你背锅,对不起我们不是TDD团队。

他们只会和你说体验!那么Antd pro提供的更多的pages代表着更多的体验场景,实现了的适配版式减少沟通成本。在我看来 antd 做到是组件的供应,作为antd的下游antd pro 做的就是pages(更多的体验场景)的供应。

3.希望 Antd pro 推出的功能,都能在体验上挖的足够深,别让程序员在后程有大坑,增加开发体验深度。

4.我想大多的star 都是像我这样半吊子的吃瓜群众。技术构架上的问题,灵活上的思考有ant团队的大牛解决,完善和深挖使用需求,有热情的社区贡献者。


希望Ant Design Pro 能识别自己的强项,和旗舰功能。

@tianenpang
Copy link

建议:可初始化一个BasicLayout空项目,需要的组件可自行选装。对于新手来说上手会更快!

@evanyangg
Copy link

有个想法,是否可以把楼上所说的BasicLayout空项目 写成一个组件,这样我用antd开发的时候可以直接引入,也可以通过yarn add 到项目中。这样有需要的人,引入这个组件就可以了。

@tomgao365
Copy link
Contributor

@evanyangg ant-design/ant-design-pro-layout
貌似已经有了

@xiaopanghhh
Copy link
Contributor

v4 发布了以后就是这样的一个版本,所有的原来的界面都改变为了 pro-blocks 。 只是现在 V4 还没有具休的发布时间节点。

@CaiJingLong
Copy link

@xiaopanghhh 没有具体的发布时间,那么可以问下v4分支的可用度到哪里了吗

@xiaopanghhh
Copy link
Contributor

@xiaopanghhh 没有具体的发布时间,那么可以问下v4分支的可用度到哪里了吗

我也想知道具休的发布时间节点。这个只能问问项目相关人员了。

@pkaq
Copy link
Contributor

pkaq commented May 28, 2019

typescript 还是不要了吧,用 antd-pro 必须先学 typescript 对很多初学者成本会比较高。

学不动了

@chenshuai2144 chenshuai2144 unpinned this issue May 31, 2019
@boylych
Copy link

boylych commented Jun 5, 2019

npm run fetch:blocks 根本不能执行啊,
yarn create umi后创建的默认脚手架内不含scripts目录

想构建一个完整demo,怎么办?

@afc163
Copy link
Member

afc163 commented Jun 5, 2019

image

image

我试了一下是有的。

@pkaq
Copy link
Contributor

pkaq commented Aug 26, 2019

大部分Pro的用户应该是使用它当项目的架子,配置简单灵活,UI设计好看,这块做好才是重点,区块或者页面其实都是用户自己开发完成。现在的Pro太重了,很多功能只是参考作用,比如权限控制,只能控制用户维度,它不能控制到角色和功能点维度;再比如国际化,需要国际话的用户应该是少数,所以只要提供一个国际化方案就行,而不是默认支持国际化。
至于ts,它很好,大部分用户应该还是没有用它在项目中,应该还是以es6为主,需要ts的同学应该单独有个仓库来支持。从关闭的issue来看,很多比较初级的问题或者用户应该自己能解决的问题都抛出了,说明有很多初级的用户,给你们维护者也增加负担。所以个人觉得应该做这个项目应该是要往精的方向发展,break change 少一点,大家都尽力支持一点。

这个确实,比如菜单后台获取这种提了无数issue的问题官方坚持了很久不拿到mock里, 而ts上的更是神来之笔,根据issue来看有很多javaer学es6都已经秃了

@Tonysmark
Copy link

typescript 还是不要了吧,用 antd-pro 必须先学 typescript 对很多初学者成本会比较高。

不会 TS 还来搞前端啊。。。说不过去啊,不能因为初学者不友好就放弃一大票现有开发者使用习惯啊

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests