1 Star 0 Fork 0

knx-paas / knx-engr

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

ENGR

该项目提供了工程化的一站式解决方案,让你不用再为繁琐的webpack配置而头疼。

该项目分为三个部分:

* run- 开头的部分为命令行工具,一般可以 npm install -g 安装
* rewired- 开头的部分为rewired,用来配置或者修饰特定功能的webpack
* scripts- 开头的是工具部分,用来提供一些工具函数

设计思路

由我们的包内提供一个默认的,基础的webpack配置。

然后提供一个可以在外部修改和定制的接口,来满足不同的功能需求。

对于针对某一特定功能的修改和定制,大部分情况下这些修改是可以复用的,我们把它抽象成一个rewired,一个项目通过多个rewired的叠加,最终可以满足任何场景的配置需求

由包内提供项目的开发服务启动,build,test等命令支持,将webpack,webpack-dev等包封装到内部,这样可以让用于构建的一系列包依赖管理在内部,可以统一升级,避免污染业务项目的package.json依赖目录

rewired规范

  1. 一个rewired应该默认导出一个function(config,env) ,或该function的高阶函数(该rewired需要参数时返回其高阶函数)。该function可以接收到两个参数,config为该rewired运行前的webpack配置env为当前命令执行的环境,可能是production或development,该函数必须返回一个处理后的config。
  2. 如果一个rewired可以设置默认参数,可以默认导出一个function然后设置withOptions作为function的静态方法,withOptions为可以接收参数的高阶函数
  3. 为了保证rewired的最大可复用性,一个rewired最好只包含特定的某单一个功能。
  4. 一个rewired可以包含多个其他rewired,可以通过组合简单的rewired实现复合功能
  5. rewired在处理config时,一些依赖顺序的配置尽量避免用数组index去获取,这样会导致rewired必须保证顺序,而提高的使用和管理的复杂性,比如要修改css-loader,应该通过scripts-util提供的相关方法去获取
//最简单的rewired  @ifchange-engr/rewired-test
module.exports=(config,env)=>{
    if(env==='production'){
        //仅生产环境需要执行的部分
    }
    if(env==='development'){
        //仅开发环境需要执行的部分
    }
    
    //共同需要执行的部分
    
    return config
};

//使用
config=require('@ifchange-engr/rewired-test')(config,env);

//需要参数的rewired @ifchange-engr/rewired-test2

module.exports=(options)=>{
    return (config,env)=>{
        if(env==='production'){
            //仅生产环境需要执行的部分
        }
        if(env==='development'){
            //仅开发环境需要执行的部分
        }
       
        //共同需要执行的部分
       
        return config
    }
};

//使用
config=require('@ifchange-engr/rewired-test2')(options)(config,env);

//需要参数但是可以设置默认参数的rewired @ifchange-engr/rewired-test3
const createRewired=(options={/*默认参数*/})=>{
    return (config,env)=>{
        if(env==='production'){
            //仅生产环境需要执行的部分
        }
        if(env==='development'){
            //仅开发环境需要执行的部分
        }
       
        //共同需要执行的部分
       
        return config
    }
};

const rewired=createRewired();

rewired.withOptions=createRewired;

module.exports=rewired;

//使用
//默认参数
config=require('@ifchange-engr/rewired-test3')(config,env);
//自定义参数
config=require('@ifchange-engr/rewired-test3').withOptions(options)(config,env);

config-overrides.js

在业务项目中,通过在根目录的config-overrides.js文件去配置rewired。config-overrides.js本身可以看作是一个无参数的rewired

脚手架

run-create包提供了脚手架功能,可以通过一个模版来初始化一个项目

该包默认提供两种默认模版,simple为最简单的项目,with egg为一个带有egg node端的项目

你也可以添加一个自定义模版,你需要首先将自定义模版发布到你npm源上,然后添加进脚手架

预制件

run-create包提供了预制件功能,可以将业务中,可复用的部分抽象成预制件。

一个预制件可以通过run-create应用到当前项目中,可以支持一定的模版编译,可以自动安装依赖。

空文件

简介

暂无描述 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/knx-paas/knx-engr.git
git@gitee.com:knx-paas/knx-engr.git
knx-paas
knx-engr
knx-engr
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891