Skip to content

v0.20.0-alpha.0

Pre-release
Pre-release
Compare
Choose a tag to compare
@thescientist13 thescientist13 released this 04 Dec 20:02
· 439 commits to master since this release

Overview

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

  1. Migrate project to ESM

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

  1. Rename postcss.config.js -> postcss.config.cjs
  2. 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

  1. 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.
  2. 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(-)