ember-apply

ember-apply

npm version CI

Automatic integration and configuration from the community.

See the Documentation.

This is a framework and ecosystem agnostic collection of recommended configurations, applied via automation, that is compatible with any kind of project, new and old.

Individual configurations may have conventions specific to a an ecosystem, but ember-apply, itself, can be used with Svelte, React, or whatever you want. The tools provided by ember-apply only require Node 16+.

Maybe most importantly, is that ember-apply can be used for any tool that wishes to use high-level project-management and transformation utilities. See #Public API.

npm (tag) npm (tag)

NOTE: this package is a slightly experimental and prone to some API or organizational changes -- but is committed to strictly following semver.

Usage

npx ember-apply <feature-name>

where <feature-name> is one of the options under #Features

Compatibility

  • Node 16 +
  • ESM

Internal applyables

typescript

npx ember-apply typescript

Automates setting up TypeScript for your V1 Addon or App.

  • correct dependencies
  • correct types
  • correct configs

volta

npx ember-apply volta

Automates setting up volta in a project, monorepo or solorepo.

  • root package.json defines node version
  • if monorepo, all other packages extend from the root package.json

tailwind

npx ember-apply tailwind

Automates the steps from Tailwind's installation docs

Known working capabilities:

  • JIT
  • Rebuilding during development

Assumptions

  • entrypoint for your app is located at app/index.html
  • entrypoint for your tests is located at tests/index.html
  • tailwind files are placed in config/tailwind/

tailwind-webpack

npx ember-apply tailwind-webpack

Automates the official Tailwind + Ember.js guide

  • Instead of placing postcss.config.js and tailwind.config.js into the project root, it places them to config/ directory.
  • Does not need any special command for building tailwind styles they will be built (and watched) together with npm start.

embroider

npx ember-apply embroider

Automates the embroider migration from the classic ember build system for maximum-compatibility mode. See the Embroider docs

ssr

implementation tbd (pr's welcome!)

npx ember-apply ssr

Known working capabilities:

  • tbd

External applyables

  • apply-gts - Automates the steps for adding gjs/gts & Glint to an existing Ember app.

Any package with as ESM with a default export

when using a package name for the <feature-name>, an ESM version of the package will attempt to be loaded and used, invoking the default export.

npx ember-apply @scope/feature-name

Local scripts may also be used. An example of this is maybe in a private monorepo where some scripts or packages aren't published to npm.

npx ember-apply ../../path/to/some/script.js # ESM required
# or
npx ember-apply ../../path/to/some/script.mjs

Adding a new applyable to this repository

  • clone this repository
  • create a packages/<ecosystem>/<feature>/index.js file examples:
    • packages/ember/tailwind/index.js
    • packages/sveltekit/tailwind/index.js
  • have a function exported as the default export. within this function, you may import form ember-apply to use any of the utility functions. the only argument passed to this function is the working directory npx ember-apply was invoked from. how the <your-applyable> folder is managed is totally up to whomever implements and maintains that code.

For Transforming JS

JSCodeShift is used

For Transforming Ember Templates

ember-template-recast is used

For Transforming HTML

posthtml is used

Related Projects

  • preset GOAL (tbd): be compatible with npx apply

    • preset does not provide codemodding tools, but it does provide basic pattern-based transforming utilities, so it's a solid option. It also does not have built-in support for template transforms.
    • currently, preset forces the install of esbuild which fails due to having the security feature ignore-scripts enabled, so preset is a non-option for folks who care about security. (or who don't mind adding an allow-list for preset)