Consistency Made Simple
Full Changelog: https://github.com/plopjs/plop/compare/v3.0.3...v3.0.4
Full Changelog: https://github.com/plopjs/plop/compare/v3.0.2...v3.0.3
Full Changelog: https://github.com/plopjs/plop/compare/v3.0.1...v3.0.2
run
typing to be a promise, as was updated in Plop 3The first major release of plop
since 2018 is here!
We've got a massive feature in this release: ESM Support. Read further to find out more!
^12.20.0
and ^14.13.1
respectivelyThis section doesn't apply to users of the
plop
CLI command, only those that are usingplop
as a library in their own generator tool.
plop
(see below to learn more)Plop
object API has changed. Instead of:Plop.launch({
cwd: argv.cwd,
configPath: path.join(__dirname, 'plopfile.js'),
require: argv.require,
completion: argv.completion
}, env => run(env, undefined, true));
You need to do:
import { dirname } from "node:path";
import { fileURLToPath } from "node:url";
const __dirname = dirname(fileURLToPath(import.meta.url));
Plop.prepare({
cwd: argv.cwd,
configPath: path.join(__dirname, 'plopfile.js'),
preload: argv.preload || [],
completion: argv.completion
}, env => Plop.execute(env, run));
The major feature of this release is support for ESM modules (https://github.com/plopjs/plop/issues/260)
This means that instead of:
module.exports = (plop) => {
// ...
}
You can now have the following code in your plopfile:
export default (plop) => {
// ...
}
Going forward, plopfiles must either be:
.mjs
file with type: "module"
in package.json
.js
file with type: "module"
in package.json
.cjs
file with type: "module"
in package.json
.js
file with type: "commonjs"
in package.json
Any of these file extensions will be recognized and accepted with the default plopfile
name, just like before.
If you want to learn more about ESM usage in a library, here's some further reading provided by Sindre Sorhus.
These limitations will also be present for plop wrapper CLIs, so it's encouraged to read the above if you're doing so.
While previously a plopfile.js
had to be a synchronous export - we now allow you to make an async function. We handle the rest!
export default async (plop) => {
// ...
}
The plop CLI itself now has a solid end-to-end tests. While this isn't done, it is very functional today. These tests have enabled us to be confident that this release should work for 99% of users without having to change much if anything at all on their end.
We even wrote our own testing library to support this
Admittedly, we have a low coverage rate, but are testing against most of the big stuff today. We welcome and encourage pull requests adding more tests to increase that rate.
We've also added CI to run those end-to-end tests against every PR against the main branch.
While this release is fun, there's more that we want to do internally sometime in the near future.
Namely:
node-plop
testsnode-plop
to use jest
instead of ava
node-plop
to monorepo in the plop
reponode-plop
and plop
master
to main
plop
Full Changelog: https://github.com/plopjs/plop/compare/v2.7.5...v2.7.6
Full Changelog: https://github.com/plopjs/plop/compare/v2.7.4...v2.7.5
dest
option in plop wrappers (https://github.com/plopjs/plop/pull/233)