4

GitHub - garronej/ts-ci: 🚀 A starter for TS projects meant to be published on NP...

 1 year ago
source link: https://github.com/garronej/ts-ci
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

garronej/ts-ci

main

Go to file

Code

109354825-ab4b8e00-787e-11eb-8336-6009415ecaf6.png

rocketA starter for any TypeScript project meant to be published on NPMrocket

ts-ci.mp4

ts-ci is a project starter like TSDX or typescript-starter but (arguably) better because:

  • It's not a CLI tool, the automation happens within Github Actions.
    Update your package.json version number, push. Voila, your new version is published on NPM.
  • It enables you to publish prerelease simply by updating your package version to something like 1.2.3-rc.3.
  • When someone opens submit a PR the tests are run agaist their fork.
  • It doesn't bundle your library into a single file so users can cherry-pick what they want to import from your lib, your modules will be tree shakable. E.g: import { aSpecificFunction } from "your-module/aSpecificFile"

Examples of project using this template

How to use

  • Click on
  • The repo name you will choose will be used as a module name for NPM.
  • Go to the repository Settings tab, then Secrets you will need to add a new secret: NPM_TOKEN, you NPM authorization token.
  • To trigger publishing edit the package.json version field ( 0.0.0-> 0.0.1 for example) then push changes... that's all !
  • Publish pre-release by setting your version number to X.Y.Z-rc.U (example: 1.0.0-rc.32). On NPM the version will be tagged next.
  • The CI runs on main and on the branches that have a PR open on main.

Features

  • writing_hand Filling up the package.json
  • white_check_mark Testing on multiple Node version running on Ubuntu and Windows before publishing.
  • package Publishing on NPM and creating corresponding GitHub releases.
  • last_quarter_moon You can use a different repo image for dark and light mode. Example with: i18nifty: Light - Dark
    See here the special GitHub syntax (#gh-dark-mode-only) that enable this to work.
    TS-CI provides an extra action that strips the dark mode specific image from your README.md before publishing on NPM (Npm do not recognize #gh-dark-mode-only yet).
  • shorts TS-CI comes by default with a step in the workflow that move your dist files to the root before releasing.
    This enables your user to import specific file of your module like:
    import {...} from "my_module/theFile" (instead of "my_module/dist/theFile" )
    Feel free to remove this action if you don't like this behavior (or if you juste have an index.ts and users are not supposed to cherry pick what they want to import from your module.)
  • gear ESlint and Prettier are automatically run against files staged for commit. (Optional, you can disable this feature)

Relase in CJS, ESM or both

By default your module relase in CJS with ESM module interop.

If you want to only release as ESM just set "module": "ES2020" in your tsconfig.json (and remove esModuleInterop).

If you want to release for both CJS and ESM, it's a bit less straign forward. You have to:

  • Have a tsconfig.json that targets CSM (as by default): example
  • Perfome two build, one for CJS, one for ESM. example
  • Provide a module and exports property in your package.json, example.

Click to expand

     
     

 : :  
       
         
    
      


 :     

  :  
        
         
    

       

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK