最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • CRA 黑盒如何实现

    正文概述 掘金(勾崽)   2020-12-09   466

    前两篇黑盒内容: “CRA 为什么要做成黑盒” 和 “如何在黑盒中争取主动权” 

    今天这篇文章我们继续谈谈 CRA 黑盒的实现

    不管是 @vue/cli 还是 create-react-app,它们内部都暗藏着黑盒的机制。在这里大家万不可把 @vue/cli 和 create-react-app 都认为是黑盒。它们仅仅是官方提供的两个脚手架,用于快速搭建项目基础结构。

    CRA 黑盒如何实现

    # 黑盒如何工作

    在项目开发中,我们把它分成三份:一份是是项目结构,一份是黑盒,一份是最终的产出。

    CRA 黑盒如何实现

    简单来说,写好后的项目,经过黑盒处理之后,就成了一个可以上线部署的产品。这个处理过程就需要前端开发者们去努力实现了。

    黑盒其实很简单,就是需要我们打破平时的开发思维,给开发者提供更简单的解决方案,一句话概括就是怎么简单怎么来。

    对于黑盒原理,我个人认为它其实就是包裹的 webpack 或者其他工具

    本篇文章我们就以 webpack 为例,写一个自己的黑盒。

    正常使用 webpack 的开发中,我们需要手动创建一个 webpack 的配置文件 webpack.config.js 。

    黑盒现在要做的是:

    • 删掉这个配置文件,在内部完成基本配置。

    • 如果你想要自己配置,不好意思,你得按照我的约定来,更换新的配置文件 demo.config.js(demo是自己起的名字)

    # 实际操作

    有一个已经配置好的项目,如下图:

    CRA 黑盒如何实现

    配置文件的内容很简单,如下:

    const path = require("path")
    module.exports =  {
        mode:"none",
        entry:"./src/index.js",
        output:{
            path:path.resolve(process.cwd(),"dist"),
            filename:"bundle.js"
        }
    }
    

    现在我们要移除 webpack.config.js 文件,同时在项目同级目录下建个 cwj-page 的文件夹。

    CRA 黑盒如何实现

    这个 cwj-page 就是我们要实现的黑盒。

    它里面的文件结构如下:

    CRA 黑盒如何实现

    bin 文件夹是我们使用该文件夹名称当作指令要执行的文件,在 bin 文件夹下创建一个跟黑盒同名的 js 文件: cwj-page.js 内容如下:

    #!/usr/bin/env node​const
    
    config = require("..")
    const webpack = require("webpack")
    const compiler = webpack(config,(err,state)=>{
        if(err)throw err;
        console.log("编译成功")
    })
    

    lib 是我们要存储的一个js文件,这个文件其实就是我们所有关于 webpack.config.js 的基本配置。

    const path = require("path")
    const cwd = process.cwd()
    const fs = require("fs")
    let config = {
        mode:"none",
        entry:"./src/index.js",
        output:{
            path:path.resolve(process.cwd(),"dist"),
            filename:"build.js"
        }
    }
    // const loadconfig = require(`${cwd}/page.config.js`)
    let cf = fs.existsSync(`${cwd}/page.config.js`)//判断当前目录下时候有约定的配置文件
    
    ​if(cf){ //有约定的配置文件
        try {
            const loadconfig = require(`${cwd}/page.config.js`)
            config = Object.assign({},config,loadconfig)
        }catch(e){
            console.log(e)
        }
    }else{ //没有约定的配置文件
        onfig = Object.assign({},config)
    }​
    
    module.exports = config
    

    注意:在这个 cwj-page 下的 webpack 必须用 npm install webpack -S 下载,因为它是黑盒所依赖的模块,目的就是要对 webpack 进行包装。

    完成之后我们现在要把 cwj-page 发布 npm 或者直接本地软连接,因为我们后面的操作要完全使用黑盒指令对项目打包。所以在 cwj-page 下的终端进行 npm link,这样在全局安装目录下就会有一个 cwj-page 的文件。

    CRA 黑盒如何实现

    再回到 demo 项目下,在 src 下的 index.js 随便写写 js 代码 ,然后使用黑盒指令 cwj-page。

    CRA 黑盒如何实现

    到此,一个简单的黑盒就算包装成功了。


    起源地下载网 » CRA 黑盒如何实现

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元