Coder Social home page Coder Social logo

arch-loader's Introduction

arch-loader

穿越多项目, 隔离项目中的不同实现 (建议:结合 workspaces)

question and solution

  • 一个已经正常运行的项目如何优雅衍生出多平台的项目?
  • 一个已经正常运行的项目如何优雅定制不同的功能?

为了解决以上问题我们通常会有一下解决方案:

  1. 在项目中加上平台或不同项目的配置,项目运行根据配置来执行不同的代码段;
    • 缺点:
      • 编译后所有的代码都打包到一起,导出资源增大
      • 源代码在同一个项目的文件资源中, 和逻辑冗余在一起, 维护不变
  2. 在项目中加上平台或不同项目的构建配置,项目构建打包时根据构建配置来编译出需要导出的代码;
    • 缺点:
      • 源代码在同一个项目的文件资源中, 和逻辑冗余在一起, 维护不变
    • 优点:
      • 构建打包后的代码中只要当前项目或平台依赖的实现, 不会增大导出资源
  • 当前实现 不同的平台或项目实现差异(各自)的功能, 项目打包构建时会根据打包的项目来加载当前项目的实现;
    • 优点:
      • 构建打包后的代码中只要当前项目或平台依赖的实现, 不会增大导出资源
      • 无需在代码中添加构建配置, 差异化的功能实现放在各自的项目中,不冗余,易维护

use

webpack arch-loader config

{
  rules: [
    {
      test: /.js$/,
      use: [
        {
          loader: 'babel-loader'
        },
        {
          loader: 'arch-loader',
          options: {
            root: 'src', // rootpath
            type: 'js',
            arch: 'arch', // default
            // project dependencies
            dependencies: ['@monorepo/rootproject/rootpath', '@monorepo/parentproject/rootpath']
          }
        }
      ]
    },
    {
      test: /.vue$/,
      use: [
        {
          loader: 'vue-loader'
        },
        {
          loader: 'arch-loader',
          options: {
            root: 'src',
            type: 'vue',
            arch: 'arch', // default
            dependencies: ['@monorepo/rootproject/rootpath', '@monorepo/parentproject/rootpath']
          }
        }
      ]
    }
  ]
}

project MAIN

import module from './arch/laoluo/cap.js'
src
├── arch
   └── laoluo
        └── cap.js

├── compmonents
   └── hoc
└── pages

// cap.js
console.log('middle cap!!!')

project A

src
├── laoluo
    └── cap.js

// project entry
import 'project MAIN'

// cap.js
console.log('big cap!!!')

project B

├── laoluo
    └── cap.js

// project entry
import 'project MAIN'

// cap.js
console.log('little cap!!!')

history

  • v0.3.0 添加dependencies

arch-loader's People

Contributors

zdzdesigner avatar

Stargazers

 avatar

Watchers

James Cloos avatar  avatar

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.