v0.20.0-alpha.0
Pre-releaseOverview
In preparation for some big new features coming to Greenwood, we are making the jump to ESM! All of Greenwood is now authored and exports ESM, which means that any projects using Greenwood, will also need to be in ESM. However, this does not mean all your project's dependencies need to be in ESM, CJS still works except in a few cases, mostly with configuration files, as documented below.
We are also dropping Node 12, with Node >= 14.17.0 being our recommendation going forward.
If using Yarn, you can can upgrade all your @greenwood packages at once
$ yarn upgrade --scope @greenwood --latest
Changelog
https://github.com/ProjectEvergreen/greenwood/issues?q=label%3Av0.20.0+label%3Aalpha.0
Breaking Changes
NodeJS
You will now want to make sure all your environments are supporting NodeJS >= 14.17.0.
Named Exports / Plugins
With the exception config files, in particular for plugins, they have all moved to using named exports. For plugins. they are also prefixed with greenwoodPlugin.
// before
const { myNameForThePlugin } = require('@greenwood/plugin-typescript');
// after
// greenwoodPluginTheName
const { greenwoodPluginTypeScript } from '@greenwood/plugin-typescript';
File Extensions
With ESM, you need to provide a file extension for any import
. Bare modules are an exception to this (since they automatically get resolved to node_modules)
# before
const { ResourceInterface } = require('@greenwood/cli/src/lib/resource-interface');
# after
import { ResourceInterface } = from '@greenwood/cli/src/lib/resource-interface.js';
Greenwood Config
In addition to all the plugin name changes, you will need to write your greenwood.config.js in ESM AND export
the config as default
.
// before
module.exports = {
title: 'My Site'
};
// after
export default {
title: 'My Site'
}
PostCSS Configuration
If you use a custom postcss.config.js, you will need to make two changes
- Rename postcss.config.js -> postcss.config.cjs
- Create an ESM version called postcss.config.mjs
// postcss.config.cjs module.exports = { plugins: [ require('postcss-nested') ] }; // postcss.config.mjs export default { plugins: [ (await import('postcss-nested')).default ] };
Other Configurations
All tools will vary, but for the popular tools out there like ESLint, StyleLint, etc, they currently only support CJS configuration files, so effectively for these, you will have to rename them all to end in .cjs.
# eslint before
.eslintrc.js
# eslint before
.eslintrc.cjs
# stylelint before
stylelint.config.js
# stylelint before
stylelint.config.cjs
ESLint
Moving to ESM, you may need to add babel-parser to your ESLint config for the parser
option to support newer syntax like Top Level Await and import.meta
.
__dirname
When going from CJS -> ESM, aside from require
-> import
one thing to keep in mind is that __dirname
is longer available and also the scheme
of a file is not consistent between platforms on NodeJS, but it is easy to get that functionality back with import.meta.url
.
// before
const path = require('path');
const myPath = path.join(__dirname, '/path/to/thing');
// after
import { fileURLToPath, URL } from path = require('path');
const myPath = fileURLToPath(new URL('/path/to/thing', import.meta.url));
Known Issues
- There is one open item now regarding greenwood-plugin-babel when extending a config, but we hope to have it fixed by the time of the final release.
- The
init
command is not running the latest version of Greenwood - #781
Diff
% git diff v0.19.3 v0.20.0-alpha.0 --stat | grep -v "www/"
.eslintignore | 2 +-
.eslintrc.js => .eslintrc.cjs | 0
.github/CONTRIBUTING.md | 73 +-
.github/ISSUE_TEMPLATE.md | 4 +-
.mocharc.js => .mocharc.cjs | 0
README.md | 15 +-
greenwood.config.js | 32 +-
lerna.json | 2 +-
nyc.config.js => nyc.config.cjs | 0
package.json | 3 +-
packages/cli/README.md | 13 +-
packages/cli/package.json | 9 +-
packages/cli/src/commands/build.js | 24 +-
packages/cli/src/commands/develop.js | 16 +-
packages/cli/src/commands/eject.js | 22 +-
packages/cli/src/commands/serve.js | 12 +-
packages/cli/src/config/rollup.config.js | 17 +-
packages/cli/src/index.js | 15 +-
packages/cli/src/lib/browser.js | 4 +-
packages/cli/src/lib/node-modules-utils.js | 12 +-
packages/cli/src/lib/resource-interface.js | 8 +-
packages/cli/src/lib/server-interface.js | 4 +-
packages/cli/src/lifecycles/bundle.js | 12 +-
packages/cli/src/lifecycles/compile.js | 12 +-
packages/cli/src/lifecycles/config.js | 54 +-
packages/cli/src/lifecycles/context.js | 17 +-
packages/cli/src/lifecycles/copy.js | 16 +-
packages/cli/src/lifecycles/graph.js | 17 +-
packages/cli/src/lifecycles/prerender.js | 8 +-
packages/cli/src/lifecycles/serve.js | 27 +-
.../cli/src/plugins/copy/plugin-copy-assets.js | 10 +-
.../cli/src/plugins/copy/plugin-copy-graph-json.js | 8 +-
.../cli/src/plugins/resource/plugin-dev-proxy.js | 10 +-
.../src/plugins/resource/plugin-node-modules.js | 73 +-
.../plugins/resource/plugin-optimization-mpa.js | 15 +-
.../cli/src/plugins/resource/plugin-source-maps.js | 12 +-
.../src/plugins/resource/plugin-standard-css.js | 16 +-
.../src/plugins/resource/plugin-standard-font.js | 12 +-
.../src/plugins/resource/plugin-standard-html.js | 47 +-
.../src/plugins/resource/plugin-standard-image.js | 12 +-
.../plugins/resource/plugin-standard-javascript.js | 12 +-
.../src/plugins/resource/plugin-standard-json.js | 10 +-
.../src/plugins/resource/plugin-user-workspace.js | 12 +-
.../cli/src/plugins/server/plugin-livereload.js | 31 +-
.../build.config.default.spec.js | 11 +-
...uild.config.error-dev-server-extensions.spec.js | 11 +-
.../greenwood.config.js | 2 +-
.../build.config.error-dev-server-hud.spec.js | 11 +-
.../greenwood.config.js | 2 +-
.../build.config.error-mode.spec.js | 11 +-
.../build.config.error-mode/greenwood.config.js | 2 +-
.../build.config.error-optimization.spec.js | 11 +-
.../greenwood.config.js | 2 +-
.../build.config.error-pages-directory.spec.js | 11 +-
.../greenwood.config.js | 2 +-
.../build.config.error-prerender.spec.js | 11 +-
.../greenwood.config.js | 2 +-
.../build.config.error-templates-directory.spec.js | 11 +-
.../greenwood.config.js | 2 +-
.../build.config.error-title.spec.js | 11 +-
.../build.config.error-title/greenwood.config.js | 2 +-
.../build.config.error-workspace-absolute.spec.js | 13 +-
.../greenwood.config.js | 6 +-
.../build.config.error-workspace.spec.js | 11 +-
.../greenwood.config.js | 2 +-
.../build.config.markdown-custom.spec.js | 17 +-
.../greenwood.config.js | 2 +-
.../build.config.markdown-custom.settings.spec.js | 15 +-
.../greenwood.config.js | 2 +-
.../build.config.meta/build.config.meta.spec.js | 21 +-
.../cases/build.config.meta/greenwood.config.js | 2 +-
.../build.config.mode-mpa.spec.js | 20 +-
.../build.config.mode-mpa/greenwood.config.js | 2 +-
.../build.config.mode-spa.spec.js | 19 +-
.../build.config.mode-spa/greenwood.config.js | 2 +-
.../test/cases/build.config.mode-spa/package.json | 1 +
.../build.config-optimization-default.spec.js | 17 +-
.../build.config-optimization-inline.spec.js | 19 +-
.../greenwood.config.js | 2 +-
.../build.config-optimization-none.spec.js | 19 +-
.../greenwood.config.js | 2 +-
.../build.config-optimization-overrides.spec.js | 19 +-
.../build.config-optimization-static.spec.js | 17 +-
.../greenwood.config.js | 2 +-
.../build.config.pages-directory.spec.js | 19 +-
.../greenwood.config.js | 2 +-
.../build.config.prerender.spec.js | 17 +-
.../build.config.prerender/greenwood.config.js | 2 +-
.../build.config.templates-directory.spec.js | 19 +-
.../greenwood.config.js | 2 +-
.../build.config.title/build.config.title.spec.js | 21 +-
.../cases/build.config.title/greenwood.config.js | 2 +-
.../build.config.workspace-custom.spec.js | 21 +-
.../greenwood.config.js | 6 +-
.../build.default.import-node-modules.spec.js | 17 +-
.../build.default.import-node-modules/package.json | 1 +
.../build.default.markdown.spec.js | 17 +-
.../build.default.markdown/greenwood.config.js | 2 +-
.../build.default.quick-start-npx.spec.js | 17 +-
.../build.default.workspace-404-markdown.spec.js | 24 +-
.../build.default.workspace-404.spec.js | 24 +-
.../build.default.workspace-assets.spec.js | 17 +-
...d.default.workspace-frontmatter-imports.spec.js | 21 +-
...build.default.workspace-getting-started.spec.js | 22 +-
...default.workspace-javascript-css-remote.spec.js | 17 +-
.../build.default.workspace-javascript-css.spec.js | 17 +-
.../build.default.workspace-nested.spec.js | 18 +-
.../build.default.workspace-template-app.spec.js | 18 +-
...default.workspace-template-page-and-app.spec.js | 17 +-
...lt.workspace-template-page-bare-merging.spec.js | 17 +-
.../build.default.workspace-template-page.spec.js | 17 +-
...build.default.workspace-templates-empty.spec.js | 17 +-
...ault.workspace-templates-relative-paths.spec.js | 19 +-
...build.default.workspace-top-level-pages.spec.js | 18 +-
...efault.workspace-user-directory-mapping.spec.js | 21 +-
.../test/cases/build.default/build.default.spec.js | 17 +-
.../build.plugins.context.spec.js | 24 +-
.../build.plugins.context/greenwood.config.js | 4 +-
.../test/cases/build.plugins.context/package.json | 3 +-
.../theme-pack-context-plugin.js | 20 +-
.../build.plugins.error-name.spec.js | 11 +-
.../build.plugins.error-name/greenwood.config.js | 2 +-
.../build.plugins.error-provider.spec.js | 11 +-
.../greenwood.config.js | 2 +-
.../build.plugins.error-type.spec.js | 11 +-
.../build.plugins.error-type/greenwood.config.js | 2 +-
.../build.config.plugins-resource.spec.js | 15 +-
.../build.plugins.resource/greenwood.config.js | 6 +-
.../develop.default.hud-disabled.spec.js | 23 +-
.../greenwood.config.js | 2 +-
.../develop.default.hud.spec.js | 23 +-
.../cases/develop.default/develop.default.spec.js | 29 +-
.../test/cases/develop.default/greenwood.config.js | 2 +-
.../cli/test/cases/develop.default/package.json | 1 +
.../develop.plugins.context.spec.js | 20 +-
.../develop.plugins.context/greenwood.config.js | 13 +-
.../cases/develop.plugins.context/package.json | 3 +-
.../cli/test/cases/develop.spa/develop.spa.spec.js | 34 +-
.../cli/test/cases/develop.spa/greenwood.config.js | 2 +-
.../test/cases/eject.default/eject.default.spec.js | 24 +-
.../test/cases/serve.default/greenwood.config.js | 2 +-
.../test/cases/serve.default/serve.default.spec.js | 17 +-
.../cli/test/cases/theme-pack/greenwood.config.js | 13 +-
.../cli/test/cases/theme-pack/my-theme-pack.js | 16 +-
packages/cli/test/cases/theme-pack/package.json | 3 +-
.../test/cases/theme-pack/theme-pack.build.spec.js | 25 +-
.../cases/theme-pack/theme-pack.develop.spec.js | 20 +-
packages/init/package.json | 3 +-
packages/init/src/copy-folder.js | 8 +-
packages/init/src/index.js | 34 +-
packages/init/src/template/greenwood.config.js | 2 +-
packages/init/src/template/package.json | 1 +
.../test/cases/build.default/build.default.spec.js | 15 +-
.../cases/develop.default/develop.default.spec.js | 21 +-
.../test/cases/init.default/init.default.spec.js | 39 +-
.../init/test/cases/init.yarn/init.yarn.spec.js | 15 +-
packages/plugin-babel/README.md | 16 +-
packages/plugin-babel/package.json | 5 +-
.../src/{babel.config.js => babel.config.mjs} | 4 +-
packages/plugin-babel/src/index.js | 32 +-
.../default/{babel.config.js => babel.config.cjs} | 0
.../test/cases/default/default.spec.js | 19 +-
.../test/cases/default/greenwood.config.js | 6 +-
.../options.extend-config/greenwood.config.js | 6 +-
.../options.extend-config.spec.js | 21 +-
packages/plugin-google-analytics/README.md | 6 +-
packages/plugin-google-analytics/package.json | 5 +-
packages/plugin-google-analytics/src/index.js | 10 +-
.../test/cases/default/default.spec.js | 21 +-
.../test/cases/default/greenwood.config.js | 6 +-
.../error-analytics-id/error-analytics-id.spec.js | 15 +-
.../cases/error-analytics-id/greenwood.config.js | 6 +-
.../cases/option-anonymous/greenwood.config.js | 6 +-
.../option-anonymous/option-anonymous.spec.js | 21 +-
packages/plugin-graphql/README.md | 15 +-
packages/plugin-graphql/package.json | 5 +-
packages/plugin-graphql/src/core/cache.js | 22 +-
.../src/core/{common.client.js => common.js} | 0
packages/plugin-graphql/src/core/common.server.js | 23 -
packages/plugin-graphql/src/core/server.js | 14 +-
packages/plugin-graphql/src/index.js | 24 +-
packages/plugin-graphql/src/schema/config.js | 4 +-
packages/plugin-graphql/src/schema/graph.js | 4 +-
packages/plugin-graphql/src/schema/schema.js | 35 +-
.../cases/develop.default/develop.default.spec.js | 27 +-
.../test/cases/develop.default/greenwood.config.js | 6 +-
.../test/cases/develop.default/package.json | 3 +-
.../cases/qraphql-server/graphql-server.spec.js | 13 +-
.../test/cases/qraphql-server/greenwood.config.js | 6 +-
.../test/cases/query-children/greenwood.config.js | 10 +-
.../test/cases/query-children/package.json | 1 +
.../cases/query-children/query-children.spec.js | 25 +-
.../test/cases/query-config/greenwood.config.js | 8 +-
.../test/cases/query-config/query-config.spec.js | 26 +-
.../query-custom-frontmatter/greenwood.config.js | 8 +-
.../cases/query-custom-frontmatter/package.json | 1 +
.../query-custom-frontmatter.spec.js | 25 +-
.../cases/query-custom-schema/greenwood.config.js | 8 +-
.../query-custom-schema.spec.js | 25 +-
.../query-custom-schema/src/data/schema/gallery.js | 8 +-
.../test/cases/query-graph/greenwood.config.js | 8 +-
.../test/cases/query-graph/package.json | 1 +
.../test/cases/query-graph/query-graph.spec.js | 25 +-
.../test/cases/query-menu/greenwood.config.js | 8 +-
.../test/cases/query-menu/package.json | 1 +
.../test/cases/query-menu/query-menu.spec.js | 25 +-
packages/plugin-graphql/test/unit/common.spec.js | 6 +-
packages/plugin-graphql/test/unit/mocks/config.js | 4 +-
packages/plugin-graphql/test/unit/mocks/graph.js | 6 +-
.../plugin-graphql/test/unit/schema/config.spec.js | 8 +-
.../test/unit/schema/graph.menu.spec.js | 8 +-
.../plugin-graphql/test/unit/schema/graph.spec.js | 8 +-
packages/plugin-import-commonjs/README.md | 6 +-
packages/plugin-import-commonjs/package.json | 5 +-
packages/plugin-import-commonjs/src/index.js | 19 +-
.../test/cases/default/default.spec.js | 23 +-
.../test/cases/default/greenwood.config.js | 6 +-
.../test/cases/default/package.json | 1 +
packages/plugin-import-css/README.md | 21 +-
packages/plugin-import-css/package.json | 10 +-
packages/plugin-import-css/src/index.js | 14 +-
.../test/cases/default/default.spec.js | 21 +-
.../test/cases/default/greenwood.config.js | 6 +-
.../cases/develop.default/develop.default.spec.js | 23 +-
.../test/cases/develop.default/greenwood.config.js | 8 +-
.../test/cases/develop.default/package.json | 3 +-
packages/plugin-import-json/README.md | 6 +-
packages/plugin-import-json/package.json | 5 +-
packages/plugin-import-json/src/index.js | 14 +-
.../test/cases/default/default.spec.js | 21 +-
.../test/cases/default/greenwood.config.js | 8 +-
.../cases/develop.default/develop.default.spec.js | 28 +-
.../test/cases/develop.default/greenwood.config.js | 6 +-
.../test/cases/develop.default/package.json | 3 +-
packages/plugin-include-html/README.md | 8 +-
packages/plugin-include-html/package.json | 5 +-
packages/plugin-include-html/src/index.js | 22 +-
.../build.default.custom-element.spec.js | 26 +-
.../greenwood.config.js | 6 +-
.../build.default-custom-element/package.json | 3 +-
.../src/components/footer.js | 10 +-
.../build.default.link-tag.spec.js | 26 +-
.../build.default-link-tag/greenwood.config.js | 6 +-
packages/plugin-polyfills/README.md | 6 +-
packages/plugin-polyfills/package.json | 5 +-
packages/plugin-polyfills/src/index.js | 20 +-
.../test/cases/default/default.spec.js | 22 +-
.../test/cases/default/greenwood.config.js | 6 +-
.../test/cases/lit/greenwood.config.js | 6 +-
.../plugin-polyfills/test/cases/lit/lit.spec.js | 23 +-
.../plugin-polyfills/test/cases/lit/package.json | 1 +
packages/plugin-postcss/README.md | 32 +-
packages/plugin-postcss/package.json | 9 +-
packages/plugin-postcss/src/index.js | 31 +-
packages/plugin-postcss/src/postcss.config.js | 4 +-
.../test/cases/default/default.spec.js | 21 +-
.../test/cases/default/greenwood.config.js | 6 +-
.../options.extend-config/greenwood.config.js | 6 +-
.../options.extend-config.spec.js | 21 +-
.../{postcss.config.js => postcss.config.cjs} | 0
.../cases/options.extend-config/postcss.config.mjs | 5 +
packages/plugin-typescript/README.md | 14 +-
packages/plugin-typescript/package.json | 5 +-
packages/plugin-typescript/src/index.js | 22 +-
.../test/cases/default/default.spec.js | 19 +-
.../test/cases/default/greenwood.config.js | 8 +-
.../cases/develop.default/develop.default.spec.js | 21 +-
.../test/cases/develop.default/greenwood.config.js | 6 +-
.../test/cases/develop.default/package.json | 3 +-
.../options.extend-config/greenwood.config.js | 8 +-
.../options.extend-config.spec.js | 19 +-
postcss.config.js => postcss.config.cjs | 0
postcss.config.mjs | 5 +
stylelint.config.js => stylelint.config.cjs | 0
test/smoke-test.js | 191 +-
test/utils.js | 6 +-
yarn.lock | 2007 +++++++++-----------
293 files changed, 3159 insertions(+), 2713 deletions(-)