com-lihaoyi / mill

Mill is a fast JVM build tool that supports Java and Scala. 2-4x faster than Gradle and 4-10x faster than Maven for common workflows, Mill aims to make your project’s build process performant, maintainable, and flexible
https://mill-build.org/
MIT License
2.2k stars 350 forks source link

Add first class Javascript/Typescript support to the Mill build tool (4500 Bounty) #3927

Open lihaoyi opened 5 days ago

lihaoyi commented 5 days ago

From the maintainer Li Haoyi: I'm putting a 4500USD bounty on this issue, payable by bank transfer on merged PRs implementing this. Standard bounty terms apply


Mill is a multi-language build tool that provides automatic caching and parallelism of build tasks related to local development (see What Makes Mill Unique?). Traditionally it targeted JVM languages, but we think that JS/TS projects could benefit from automatic caching and parallelism as well, especially the larger multi-language codebases with both JVM and JS/TS modules that would benefit from having a single build tool able to build code in both languages incrementally and in parallel.

The goal of this ticket is to generate a set of Typescript build examples that match the Java/Scala/Kotlin equivalents. We already have an example TypescriptModule for demo purposes, but we would need to flesh it out using the equivalent Typescript tools and libraries.

For the purposes of this ticket, each examples should match as closely as possible the Java/Scala/Kotlin equivalents, to provide a useful minimal-but-still-educational code example, along with associated english documentation and explanations. You should read through the relevant sections of the Building Java with Mill documentation before proceeding, even if you don't know Java, just to get a feel for what the documentation and examples for each section should cover.

ayewo commented 1 day ago

Hi @lihaoyi

As a first-time contributor, I will be going over CONTRIBUTING.adoc.

Meanwhile, I have a question.

For the first task, example/jslib/basic/, I take it example/jslib/basic/ is relative to https://github.com/com-lihaoyi/mill/tree/main/example , and this is where the PR will be opened against, correct?

Myestery commented 1 day ago

Hi @lihaoyi , I'll like to work on the linting and testing parts of this bounty

lihaoyi commented 1 day ago

@ayewo so there are two main components to the first task:

There is existing demo code in https://github.com/com-lihaoyi/mill/blob/main/example/extending/typescript/4-npm-deps-bundle/build.mill that can form the basis of the library code in jslib/, but I expect it will need to be fleshed out (e.g. to include support for at least one JS test-runner)

digvijay2003 commented 8 hours ago

Hi @lihaoyi, I have a solid background in JavaScript and TypeScript and would like to work on this PR. Could you please guide me on how to get started with it?