feat(bundling): rename esbuild-project, rollup-project, and webpack-project generators to "configuration" generators for consistency in naming (#18003)

This commit is contained in:
Jack Hsu 2023-07-07 13:59:41 -04:00 committed by GitHub
parent 8d5cfcc2b3
commit 24e45d494f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 388 additions and 120 deletions

View File

@ -4841,9 +4841,9 @@
"disableCollapsible": false
},
{
"id": "esbuild-project",
"path": "/packages/esbuild/generators/esbuild-project",
"name": "esbuild-project",
"id": "configuration",
"path": "/packages/esbuild/generators/configuration",
"name": "configuration",
"children": [],
"isExternal": false,
"disableCollapsible": false
@ -6530,9 +6530,9 @@
"disableCollapsible": false
},
{
"id": "rollup-project",
"path": "/packages/rollup/generators/rollup-project",
"name": "rollup-project",
"id": "configuration",
"path": "/packages/rollup/generators/configuration",
"name": "configuration",
"children": [],
"isExternal": false,
"disableCollapsible": false
@ -6986,9 +6986,9 @@
"disableCollapsible": false
},
{
"id": "webpack-project",
"path": "/packages/webpack/generators/webpack-project",
"name": "webpack-project",
"id": "configuration",
"path": "/packages/webpack/generators/configuration",
"name": "configuration",
"children": [],
"isExternal": false,
"disableCollapsible": false

View File

@ -651,13 +651,13 @@
"path": "/packages/esbuild/generators/init",
"type": "generator"
},
"/packages/esbuild/generators/esbuild-project": {
"/packages/esbuild/generators/configuration": {
"description": "Add esbuild configuration to a project.",
"file": "generated/packages/esbuild/generators/esbuild-project.json",
"file": "generated/packages/esbuild/generators/configuration.json",
"hidden": true,
"name": "esbuild-project",
"originalFilePath": "/packages/esbuild/src/generators/esbuild-project/schema.json",
"path": "/packages/esbuild/generators/esbuild-project",
"name": "configuration",
"originalFilePath": "/packages/esbuild/src/generators/configuration/schema.json",
"path": "/packages/esbuild/generators/configuration",
"type": "generator"
}
},
@ -2336,13 +2336,13 @@
"path": "/packages/rollup/generators/init",
"type": "generator"
},
"/packages/rollup/generators/rollup-project": {
"/packages/rollup/generators/configuration": {
"description": "Add rollup configuration to a project.",
"file": "generated/packages/rollup/generators/rollup-project.json",
"file": "generated/packages/rollup/generators/configuration.json",
"hidden": true,
"name": "rollup-project",
"originalFilePath": "/packages/rollup/src/generators/rollup-project/schema.json",
"path": "/packages/rollup/generators/rollup-project",
"name": "configuration",
"originalFilePath": "/packages/rollup/src/generators/configuration/schema.json",
"path": "/packages/rollup/generators/configuration",
"type": "generator"
}
},
@ -2782,13 +2782,13 @@
"path": "/packages/webpack/generators/init",
"type": "generator"
},
"/packages/webpack/generators/webpack-project": {
"/packages/webpack/generators/configuration": {
"description": "Add webpack configuration to a project.",
"file": "generated/packages/webpack/generators/webpack-project.json",
"file": "generated/packages/webpack/generators/configuration.json",
"hidden": true,
"name": "webpack-project",
"originalFilePath": "/packages/webpack/src/generators/webpack-project/schema.json",
"path": "/packages/webpack/generators/webpack-project",
"name": "configuration",
"originalFilePath": "/packages/webpack/src/generators/configuration/schema.json",
"path": "/packages/webpack/generators/configuration",
"type": "generator"
}
},

View File

@ -642,11 +642,11 @@
},
{
"description": "Add esbuild configuration to a project.",
"file": "generated/packages/esbuild/generators/esbuild-project.json",
"file": "generated/packages/esbuild/generators/configuration.json",
"hidden": true,
"name": "esbuild-project",
"originalFilePath": "/packages/esbuild/src/generators/esbuild-project/schema.json",
"path": "esbuild/generators/esbuild-project",
"name": "configuration",
"originalFilePath": "/packages/esbuild/src/generators/configuration/schema.json",
"path": "esbuild/generators/configuration",
"type": "generator"
}
],
@ -2313,11 +2313,11 @@
},
{
"description": "Add rollup configuration to a project.",
"file": "generated/packages/rollup/generators/rollup-project.json",
"file": "generated/packages/rollup/generators/configuration.json",
"hidden": true,
"name": "rollup-project",
"originalFilePath": "/packages/rollup/src/generators/rollup-project/schema.json",
"path": "rollup/generators/rollup-project",
"name": "configuration",
"originalFilePath": "/packages/rollup/src/generators/configuration/schema.json",
"path": "rollup/generators/configuration",
"type": "generator"
}
],
@ -2754,11 +2754,11 @@
},
{
"description": "Add webpack configuration to a project.",
"file": "generated/packages/webpack/generators/webpack-project.json",
"file": "generated/packages/webpack/generators/configuration.json",
"hidden": true,
"name": "webpack-project",
"originalFilePath": "/packages/webpack/src/generators/webpack-project/schema.json",
"path": "webpack/generators/webpack-project",
"name": "configuration",
"originalFilePath": "/packages/webpack/src/generators/configuration/schema.json",
"path": "webpack/generators/configuration",
"type": "generator"
}
],

View File

@ -45,13 +45,13 @@ This command will install the esbuild plugin if needed, and set `@nx/esbuild:esb
If you already have a JS project that you want to use esbuild for, run this command:
```shell
nx g esbuild-project mylib
nx g @nx/esbuild:configuration mylib
```
This generator validates there isn't an existing `build` target. If you want to overwrite the existing target you can pass the `--skipValidation` option.
```shell
nx g esbuild-project mylib --skipValidation
nx g @nx/esbuild:configuration mylib --skipValidation
```
## Using esbuild

View File

@ -206,7 +206,7 @@
}
},
"additionalProperties": true,
"examplesFile": "`<app-root>/project.json`:\n\n```json\n{\n //...\n \"targets\": {\n //...\n \"build\": {\n \"executor\": \"@nx/esbuild:esbuild\",\n \"options\": {\n \"main\": \"<app-root>\",\n \"tsConfig\": \"<app-root>/tsconfig.app.json\",\n \"outputPath\": \"dist/<app-root>\"\n }\n }\n }\n}\n```\n\n```bash\nnx build <app-name>\n```\n\n## Examples\n\n{% tabs %}\n{% tab label=\"CommonJS output\" %}\n\nThe CommonJS format is required in some environments, such as Electron applications. By default, `esbuild` will use the ESM format, which is recommended for Web and Node applications. You may also output to multiple formats.\n\n```bash\nnx build <app-name> --format=cjs\nnx build <app-name> --format=esm,cjs\nnx build <app-name> # defaults to es# defaults to esm\n```\n\n```json\n\"build\": {\n \"executor\": \"@nx/esbuild:esbuild\",\n \"options\": {\n \"main\": \"<app-root>\",\n \"tsConfig\": \"<app-root>/tsconfig.app.json\",\n \"outputPath\": \"dist/<app-root>\",\n \"format\": [\"esm\", \"cjs\"]\n}\n```\n\n{% /tab %}\n{% tab label=\"External packages\" %}\n\nYou can avoid packages from being bundled by providing the `external` option with a list of packages to skip.\n\nYou can also use `*` wildcard to match assets.\n\n```json\n\"build\": {\n \"executor\": \"@nx/esbuild:esbuild\",\n \"options\": {\n \"main\": \"<app-root>\",\n \"tsConfig\": \"<app-root>/tsconfig.app.json\",\n \"outputPath\": \"dist/<app-root>\",\n \"external\": [\"lodash\", \"*.png\"]\n}\n```\n\n{% /tab %}\n{% tab label=\"Skip type checking\" %}\n\nType checking is the slowest part of the build. You may want to skip type checking during build and run it as another job in CI.\n\n```json\n\"build\": {\n \"executor\": \"@nx/esbuild:esbuild\",\n \"options\": {\n \"main\": \"<app-root>\",\n \"tsConfig\": \"<app-root>/tsconfig.app.json\",\n \"outputPath\": \"dist/<app-root>\",\n \"skipTypeCheck\": true\n}\n```\n\n{% /tab %}\n{% tab label=\"Additional esbuild options\" %}\n\nAdditional [esbuild options](https://esbuild.github.io/api/) can be passed using `esbuildOptions` in your project configuration.\n\n```json\n\"build\": {\n \"executor\": \"@nx/esbuild:esbuild\",\n \"options\": {\n \"main\": \"<app-root>\",\n \"tsConfig\": \"<app-root>/tsconfig.app.json\",\n \"outputPath\": \"dist/<app-root>\",\n \"esbuildOptions\": {\n \"legalComments\": \"inline\"\n \"banner\": {\n \".js\": \"// banner\"\n },\n \"footer\": {\n \".js\": \"// footer\"\n }\n }\n}\n```\n\n{% /tab %}\n{% tabs %}\n",
"examplesFile": "`<app-root>/project.json`:\n\n```jsonc\n{\n //...\n \"targets\": {\n //...\n \"build\": {\n \"executor\": \"@nx/esbuild:esbuild\",\n \"options\": {\n \"main\": \"<app-root>\",\n \"tsConfig\": \"<app-root>/tsconfig.app.json\",\n \"outputPath\": \"dist/<app-root>\"\n }\n }\n }\n}\n```\n\n```bash\nnx build <app-name>\n```\n\n## Examples\n\n{% tabs %}\n{% tab label=\"CommonJS output\" %}\n\nThe CommonJS format is required in some environments, such as Electron applications. By default, `esbuild` will use the ESM format, which is recommended for Web and Node applications. You may also output to multiple formats.\n\n```bash\nnx build <app-name> --format=cjs\nnx build <app-name> --format=esm,cjs\nnx build <app-name> # defaults to es# defaults to esm\n```\n\n```json\n\"build\": {\n \"executor\": \"@nx/esbuild:esbuild\",\n \"options\": {\n \"main\": \"<app-root>\",\n \"tsConfig\": \"<app-root>/tsconfig.app.json\",\n \"outputPath\": \"dist/<app-root>\",\n \"format\": [\"esm\", \"cjs\"]\n}\n```\n\n{% /tab %}\n{% tab label=\"External packages\" %}\n\nYou can avoid packages from being bundled by providing the `external` option with a list of packages to skip.\n\nYou can also use `*` wildcard to match assets.\n\n```json\n\"build\": {\n \"executor\": \"@nx/esbuild:esbuild\",\n \"options\": {\n \"main\": \"<app-root>\",\n \"tsConfig\": \"<app-root>/tsconfig.app.json\",\n \"outputPath\": \"dist/<app-root>\",\n \"external\": [\"lodash\", \"*.png\"]\n}\n```\n\n{% /tab %}\n{% tab label=\"Skip type checking\" %}\n\nType checking is the slowest part of the build. You may want to skip type checking during build and run it as another job in CI.\n\n```json\n\"build\": {\n \"executor\": \"@nx/esbuild:esbuild\",\n \"options\": {\n \"main\": \"<app-root>\",\n \"tsConfig\": \"<app-root>/tsconfig.app.json\",\n \"outputPath\": \"dist/<app-root>\",\n \"skipTypeCheck\": true\n}\n```\n\n{% /tab %}\n{% tab label=\"Additional esbuild options\" %}\n\nAdditional [esbuild options](https://esbuild.github.io/api/) can be passed using `esbuildOptions` in your project configuration.\n\n```json\n\"build\": {\n \"executor\": \"@nx/esbuild:esbuild\",\n \"options\": {\n \"main\": \"<app-root>\",\n \"tsConfig\": \"<app-root>/tsconfig.app.json\",\n \"outputPath\": \"dist/<app-root>\",\n \"esbuildOptions\": {\n \"legalComments\": \"inline\"\n \"banner\": {\n \".js\": \"// banner\"\n },\n \"footer\": {\n \".js\": \"// footer\"\n }\n }\n}\n```\n\n{% /tab %}\n{% tabs %}\n",
"presets": []
},
"description": "Bundle a package using EsBuild.",

View File

@ -0,0 +1,75 @@
{
"name": "configuration",
"aliases": ["esbuild-project"],
"factory": "./src/generators/configuration/configuration",
"schema": {
"$schema": "http://json-schema.org/schema",
"$id": "NxEsBuildProject",
"cli": "nx",
"title": "Add esbuild configuration to a project",
"description": "Add esbuild configuration to a project.",
"type": "object",
"properties": {
"project": {
"type": "string",
"description": "The name of the project.",
"$default": { "$source": "argv", "index": 0 },
"x-dropdown": "project",
"x-prompt": "What is the name of the project to set up a esbuild for?",
"x-priority": "important"
},
"main": {
"type": "string",
"description": "Path relative to the workspace root for the main entry file. Defaults to `<project-root>/src/main.ts` or `<project-root>src/index.ts`, whichever is found.",
"alias": "entryFile",
"x-priority": "important"
},
"tsConfig": {
"type": "string",
"description": "Path relative to the workspace root for the tsconfig file to build with. Defaults to `<project-root>/tsconfig.app.json` or `<project-root>/tsconfig.lib.json`, whichever is found.",
"x-priority": "important"
},
"skipFormat": {
"description": "Skip formatting files.",
"type": "boolean",
"default": false,
"x-priority": "internal"
},
"skipPackageJson": {
"type": "boolean",
"default": false,
"description": "Do not add dependencies to `package.json`.",
"x-priority": "internal"
},
"skipValidation": {
"type": "boolean",
"default": false,
"description": "Do not perform any validation on existing project.",
"x-priority": "internal"
},
"importPath": {
"type": "string",
"description": "The library name used to import it, like `@myorg/my-awesome-lib`."
},
"platform": {
"type": "string",
"description": "Platform target for outputs.",
"enum": ["browser", "node", "neutral"],
"default": "node"
},
"buildTarget": {
"description": "The build target to add.",
"type": "string",
"default": "build"
}
},
"required": [],
"examplesFile": "```bash\nnx g @nx/esbuild:configuration my-package\n```\n\n{% callout type=\"note\" title=\"Overwriting existing build option\" %}\nThe `configuration` generator validates that an existing `build` target isn't already defined for the project. If you are adding esbuild to a project with an existing `build` target, pass the `--skipValidation` option.\n{% /callout %}\n\nYou may also provide a custom main entry file, or a custom tsconfig file if the defaults don't work. By default, the generator will look for a main file matching `src/index.ts` or `src/main.ts`, and a tsconfig file matching `tsconfig.app.json` or `tsconfig.lib.json`.\n\n```bash\nnx g @nx/esbuild:configuration my-package \\\n--main=packages/my-package/src/entry.ts \\\n--tsConfig=packages/my-package/tsconfig.custom.json\n```\n",
"presets": []
},
"description": "Add esbuild configuration to a project.",
"hidden": true,
"implementation": "/packages/esbuild/src/generators/configuration/configuration.ts",
"path": "/packages/esbuild/src/generators/configuration/schema.json",
"type": "generator"
}

View File

@ -0,0 +1,83 @@
{
"name": "configuration",
"aliases": ["rollup-project"],
"factory": "./src/generators/configuration/configuration",
"schema": {
"$schema": "http://json-schema.org/schema",
"$id": "NxRollupProject",
"cli": "nx",
"title": "Add Rollup Configuration to a project",
"description": "Add Rollup Configuration to a project.",
"type": "object",
"properties": {
"project": {
"type": "string",
"description": "The name of the project.",
"$default": { "$source": "argv", "index": 0 },
"x-dropdown": "project",
"x-prompt": "What is the name of the project to set up a rollup for?",
"x-priority": "important"
},
"compiler": {
"type": "string",
"enum": ["babel", "swc", "tsc"],
"description": "The compiler to use to build source.",
"default": "babel"
},
"main": {
"type": "string",
"description": "Path relative to the workspace root for the main entry file. Defaults to '<projectRoot>/src/main.ts'.",
"alias": "entryFile",
"x-priority": "important"
},
"tsConfig": {
"type": "string",
"description": "Path relative to the workspace root for the tsconfig file to build with. Defaults to '<projectRoot>/tsconfig.app.json'.",
"x-priority": "important"
},
"skipFormat": {
"description": "Skip formatting files.",
"type": "boolean",
"default": false,
"x-priority": "internal"
},
"skipPackageJson": {
"type": "boolean",
"default": false,
"description": "Do not add dependencies to `package.json`.",
"x-priority": "internal"
},
"skipValidation": {
"type": "boolean",
"default": false,
"description": "Do not perform any validation on existing project.",
"x-priority": "internal"
},
"importPath": {
"type": "string",
"description": "The library name used to import it, like `@myorg/my-awesome-lib`."
},
"external": {
"type": "array",
"description": "A list of external modules that will not be bundled (`react`, `react-dom`, etc.).",
"items": { "type": "string" }
},
"rollupConfig": {
"type": "string",
"description": "Path relative to workspace root to a custom rollup file that takes a config object and returns an updated config."
},
"buildTarget": {
"description": "The build target to add.",
"type": "string",
"default": "build"
}
},
"required": [],
"presets": []
},
"description": "Add rollup configuration to a project.",
"hidden": true,
"implementation": "/packages/rollup/src/generators/configuration/configuration.ts",
"path": "/packages/rollup/src/generators/configuration/schema.json",
"type": "generator"
}

View File

@ -0,0 +1,85 @@
{
"name": "configuration",
"aliases": ["webpack-project"],
"factory": "./src/generators/configuration/configuration",
"schema": {
"$schema": "http://json-schema.org/schema",
"$id": "NxWebpackProject",
"cli": "nx",
"title": "Add Webpack Configuration to a project",
"description": "Add Webpack Configuration to a project.",
"type": "object",
"properties": {
"project": {
"type": "string",
"description": "The name of the project.",
"$default": { "$source": "argv", "index": 0 },
"x-dropdown": "project",
"x-prompt": "What is the name of the project to set up a webpack for?",
"x-priority": "important"
},
"compiler": {
"type": "string",
"enum": ["babel", "swc", "tsc"],
"description": "The compiler to use to build source.",
"default": "swc"
},
"main": {
"type": "string",
"description": "Path relative to the workspace root for the main entry file. Defaults to '<projectRoot>/src/main.ts'.",
"x-priority": "important"
},
"tsConfig": {
"type": "string",
"description": "Path relative to the workspace root for the tsconfig file to build with. Defaults to '<projectRoot>/tsconfig.app.json'.",
"x-priority": "important"
},
"target": {
"type": "string",
"description": "Target platform for the build, same as the Webpack config option.",
"enum": ["node", "web", "webworker"],
"default": "web"
},
"skipFormat": {
"description": "Skip formatting files.",
"type": "boolean",
"default": false,
"x-priority": "internal"
},
"skipPackageJson": {
"type": "boolean",
"default": false,
"description": "Do not add dependencies to `package.json`.",
"x-priority": "internal"
},
"skipValidation": {
"type": "boolean",
"default": false,
"description": "Do not perform any validation on existing project.",
"x-priority": "internal"
},
"devServer": {
"type": "boolean",
"description": "Add a serve target to run a local webpack dev-server",
"default": false
},
"webpackConfig": {
"type": "string",
"description": "Path relative to workspace root to a custom webpack file that takes a config object and returns an updated config.",
"x-priority": "internal"
},
"babelConfig": {
"type": "string",
"description": "Optionally specify a path relative to workspace root to the babel configuration file of your project.",
"x-completion-type": "file"
}
},
"required": [],
"presets": []
},
"description": "Add webpack configuration to a project.",
"hidden": true,
"implementation": "/packages/webpack/src/generators/configuration/configuration.ts",
"path": "/packages/webpack/src/generators/configuration/schema.json",
"type": "generator"
}

View File

@ -45,13 +45,13 @@ This command will install the esbuild plugin if needed, and set `@nx/esbuild:esb
If you already have a JS project that you want to use esbuild for, run this command:
```shell
nx g esbuild-project mylib
nx g @nx/esbuild:configuration mylib
```
This generator validates there isn't an existing `build` target. If you want to overwrite the existing target you can pass the `--skipValidation` option.
```shell
nx g esbuild-project mylib --skipValidation
nx g @nx/esbuild:configuration mylib --skipValidation
```
## Using esbuild

View File

@ -353,7 +353,7 @@
- [esbuild](/packages/esbuild/executors/esbuild)
- [generators](/packages/esbuild/generators)
- [init](/packages/esbuild/generators/init)
- [esbuild-project](/packages/esbuild/generators/esbuild-project)
- [configuration](/packages/esbuild/generators/configuration)
- [eslint-plugin](/packages/eslint-plugin)
- [documents](/packages/eslint-plugin/documents)
- [Overview](/packages/eslint-plugin/documents/overview)
@ -558,7 +558,7 @@
- [rollup](/packages/rollup/executors/rollup)
- [generators](/packages/rollup/generators)
- [init](/packages/rollup/generators/init)
- [rollup-project](/packages/rollup/generators/rollup-project)
- [configuration](/packages/rollup/generators/configuration)
- [storybook](/packages/storybook)
- [documents](/packages/storybook/documents)
- [Nx Storybook Plugin Overview](/packages/storybook/documents/overview)
@ -613,7 +613,7 @@
- [ssr-dev-server](/packages/webpack/executors/ssr-dev-server)
- [generators](/packages/webpack/generators)
- [init](/packages/webpack/generators/init)
- [webpack-project](/packages/webpack/generators/webpack-project)
- [configuration](/packages/webpack/generators/configuration)
- [workspace](/packages/workspace)
- [documents](/packages/workspace/documents)
- [Overview](/packages/workspace/documents/overview)

View File

@ -20,7 +20,7 @@ describe('Rollup Plugin', () => {
// babel (default)
runCLI(
`generate @nx/rollup:rollup-project ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts`
`generate @nx/rollup:configuration ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts`
);
rmDist();
runCLI(`build ${myPkg}`);
@ -34,7 +34,7 @@ describe('Rollup Plugin', () => {
// swc
runCLI(
`generate @nx/rollup:rollup-project ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=swc`
`generate @nx/rollup:configuration ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=swc`
);
rmDist();
runCLI(`build ${myPkg}`);
@ -48,7 +48,7 @@ describe('Rollup Plugin', () => {
// tsc
runCLI(
`generate @nx/rollup:rollup-project ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=tsc`
`generate @nx/rollup:configuration ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=tsc`
);
rmDist();
runCLI(`build ${myPkg}`);

View File

@ -19,7 +19,7 @@ describe('Webpack Plugin', () => {
updateFile(`libs/${myPkg}/src/index.ts`, `console.log('Hello');\n`);
runCLI(
`generate @nx/webpack:webpack-project ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts`
`generate @nx/webpack:configuration ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts`
);
// Test `scriptType` later during during.
@ -52,7 +52,7 @@ module.exports = composePlugins(withNx(), (config) => {
// swc
runCLI(
`generate @nx/webpack:webpack-project ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=swc`
`generate @nx/webpack:configuration ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=swc`
);
rmDist();
runCLI(`build ${myPkg}`);
@ -66,7 +66,7 @@ module.exports = composePlugins(withNx(), (config) => {
// tsc
runCLI(
`generate @nx/webpack:webpack-project ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=tsc`
`generate @nx/webpack:configuration ${myPkg} --target=node --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts --compiler=tsc`
);
rmDist();
runCLI(`build ${myPkg}`);
@ -80,7 +80,7 @@ module.exports = composePlugins(withNx(), (config) => {
updateFile(`libs/${myPkg}/src/index.ts`, `console.log('Hello');\n`);
runCLI(
`generate @nx/webpack:webpack-project ${myPkg} --target=node --compiler=babel --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts`
`generate @nx/webpack:configuration ${myPkg} --target=node --compiler=babel --tsConfig=libs/${myPkg}/tsconfig.lib.json --main=libs/${myPkg}/src/index.ts`
);
updateFile(

View File

@ -148,6 +148,8 @@ const schemaUrls = {
'/packages/cypress/generators/configuration',
'/packages/cypress/generators/cypress-component-configuration':
'/packages/cypress/generators/component-configuration',
'/packages/esbuild/generators/esbuild-project':
'/packages/esbuild/generators/configuration',
'/packages/nx-plugin/generators/executor':
'/packages/plugin/generators/executor',
'/packages/nx-plugin/generators/migration':
@ -156,6 +158,10 @@ const schemaUrls = {
'/packages/nx-plugin/generators/schematic':
'/packages/plugin/generators/generator',
'/packages/nx-plugin/generators/e2e': '/packages/plugin/executors/e2e',
'/packages/rollup/generators/rollup-project':
'/packages/rollup/generators/configuration',
'/packages/webpack/generators/webpack-project':
'/packages/webpack/generators/configuration',
'/nx-plugin/executor': '/packages/plugin/generators/executor',
'/nx-plugin/migration': '/packages/plugin/generators/migration',
'/nx-plugin/plugin': '/packages/plugin/generators/plugin',

View File

@ -1,15 +1,15 @@
```bash
nx g @nx/esbuild:esbuild-project my-package
nx g @nx/esbuild:configuration my-package
```
{% callout type="note" title="Overwriting existing build option" %}
The `esbuild-projet` generator validates that an existing `build` target isn't already defined for the project. If you are adding esbuild to a project with an existing `build` target, pass the `--skipValidation` option.
The `configuration` generator validates that an existing `build` target isn't already defined for the project. If you are adding esbuild to a project with an existing `build` target, pass the `--skipValidation` option.
{% /callout %}
You may also provide a custom main entry file, or a custom tsconfig file if the defaults don't work. By default, the generator will look for a main file matching `src/index.ts` or `src/main.ts`, and a tsconfig file matching `tsconfig.app.json` or `tsconfig.lib.json`.
```bash
nx g @nx/esbuild:esbuild-project my-package \
nx g @nx/esbuild:configuration my-package \
--main=packages/my-package/src/entry.ts \
--tsConfig=packages/my-package/tsconfig.custom.json
```

View File

@ -1,6 +1,6 @@
`<app-root>/project.json`:
```json
```jsonc
{
//...
"targets": {

View File

@ -8,9 +8,10 @@
"description": "Initialize the `@nrwl/esbuild` plugin.",
"hidden": true
},
"esbuild-project": {
"factory": "./src/generators/esbuild-project/esbuild-project#esbuildProjectSchematic",
"schema": "./src/generators/esbuild-project/schema.json",
"configuration": {
"aliases": ["esbuild-project"],
"factory": "./src/generators/configuration/configuration#compat",
"schema": "./src/generators/configuration/schema.json",
"description": "Add esbuild configuration to a project.",
"hidden": true
}
@ -23,9 +24,10 @@
"aliases": ["ng-add"],
"hidden": true
},
"esbuild-project": {
"factory": "./src/generators/esbuild-project/esbuild-project#esbuildProjectGenerator",
"schema": "./src/generators/esbuild-project/schema.json",
"configuration": {
"aliases": ["esbuild-project"],
"factory": "./src/generators/configuration/configuration",
"schema": "./src/generators/configuration/schema.json",
"description": "Add esbuild configuration to a project.",
"hidden": true
}

View File

@ -1,3 +1,9 @@
import { configurationGenerator } from './src/generators/configuration/configuration';
export { configurationGenerator };
// Exported for backwards compatibility in case a plugin is using the old name.
/** @deprecated Use `configurationGenerator` instead. */
const esbuildProjectGenerator = configurationGenerator;
export * from './src/generators/init/init';
export * from './src/generators/esbuild-project/esbuild-project';
export * from './src/utils/versions';

View File

@ -5,9 +5,9 @@ import {
writeJson,
} from '@nx/devkit';
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
import esbuildProjectGenerator from './esbuild-project';
import configurationGenerator from './configuration';
describe('esbuildProjectGenerator', () => {
describe('configurationGenerator', () => {
let tree: Tree;
beforeEach(() => {
@ -25,7 +25,7 @@ describe('esbuildProjectGenerator', () => {
tree.write(`mypkg/src/${main}`, 'console.log("main");');
writeJson(tree, `mypkg/${tsConfig}`, {});
await esbuildProjectGenerator(tree, {
await configurationGenerator(tree, {
project: 'mypkg',
});
@ -47,7 +47,7 @@ describe('esbuildProjectGenerator', () => {
tree.write(`src/main.ts`, 'console.log("main");');
writeJson(tree, `tsconfig.app.json`, {});
await esbuildProjectGenerator(tree, {
await configurationGenerator(tree, {
project: 'mypkg',
});

View File

@ -14,7 +14,7 @@ import { esbuildInitGenerator } from '../init/init';
import { EsBuildExecutorOptions } from '../../executors/esbuild/schema';
import { EsBuildProjectSchema } from './schema';
export async function esbuildProjectGenerator(
export async function configurationGenerator(
tree: Tree,
options: EsBuildProjectSchema
) {
@ -126,8 +126,6 @@ function getTsConfigFile(tree: Tree, options: EsBuildProjectSchema) {
return options.tsConfig;
}
export const esbuildProjectSchematic = convertNxGenerator(
esbuildProjectGenerator
);
export const compat = convertNxGenerator(configurationGenerator);
export default esbuildProjectGenerator;
export default configurationGenerator;

View File

@ -63,5 +63,5 @@
}
},
"required": [],
"examplesFile": "../../../docs/esbuild-project-examples.md"
"examplesFile": "../../../docs/configuration-examples.md"
}

View File

@ -88,11 +88,11 @@ export async function setupBuildGenerator(
break;
}
case 'esbuild': {
const { esbuildProjectGenerator } = ensurePackage(
const { configurationGenerator } = ensurePackage(
'@nx/esbuild',
nxVersion
);
const task = await esbuildProjectGenerator(tree, {
const task = await configurationGenerator(tree, {
main: mainFile,
buildTarget: options.buildTarget,
project: options.project,
@ -102,8 +102,8 @@ export async function setupBuildGenerator(
break;
}
case 'rollup': {
const { rollupProjectGenerator } = ensurePackage('@nx/rollup', nxVersion);
const task = await rollupProjectGenerator(tree, {
const { configurationGenerator } = ensurePackage('@nx/rollup', nxVersion);
const task = await configurationGenerator(tree, {
buildTarget: options.buildTarget,
main: mainFile,
project: options.project,

View File

@ -8,9 +8,10 @@
"description": "Initialize the `@nrwl/rollup` plugin.",
"hidden": true
},
"rollup-project": {
"factory": "./src/generators/rollup-project/rollup-project#rollupProjectSchematic",
"schema": "./src/generators/rollup-project/schema.json",
"configuration": {
"aliases": ["rollup-project"],
"factory": "./src/generators/configuration/configuration#compat",
"schema": "./src/generators/configuration/schema.json",
"description": "Add rollup configuration to a project.",
"hidden": true
}
@ -23,9 +24,10 @@
"aliases": ["ng-add"],
"hidden": true
},
"rollup-project": {
"factory": "./src/generators/rollup-project/rollup-project#rollupProjectGenerator",
"schema": "./src/generators/rollup-project/schema.json",
"configuration": {
"aliases": ["rollup-project"],
"factory": "./src/generators/configuration/configuration",
"schema": "./src/generators/configuration/schema.json",
"description": "Add rollup configuration to a project.",
"hidden": true
}

View File

@ -1,5 +1,11 @@
import { configurationGenerator } from './src/generators/configuration/configuration';
export { configurationGenerator };
// Exported for backwards compatibility in case a plugin is using the old name.
/** @deprecated Use `configurationGenerator` instead. */
export const rollupProjectGenerator = configurationGenerator;
export * from './src/generators/init/init';
export * from './src/generators/rollup-project/rollup-project';
export type {
AssetGlobPattern,
Globals,

View File

@ -7,9 +7,9 @@ import {
} from '@nx/devkit';
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
import { rollupProjectGenerator } from './rollup-project';
import configurationGenerator from './configuration';
describe('rollupProjectGenerator', () => {
describe('configurationGenerator', () => {
let tree: Tree;
beforeEach(async () => {
@ -22,7 +22,7 @@ describe('rollupProjectGenerator', () => {
});
it('should generate files', async () => {
await rollupProjectGenerator(tree, {
await configurationGenerator(tree, {
project: 'mypkg',
});
@ -50,7 +50,7 @@ describe('rollupProjectGenerator', () => {
name: '@acme/mypkg',
version: '1.0.0',
});
await rollupProjectGenerator(tree, {
await configurationGenerator(tree, {
project: 'mypkg',
});
@ -61,7 +61,7 @@ describe('rollupProjectGenerator', () => {
});
it('should support --main option', async () => {
await rollupProjectGenerator(tree, {
await configurationGenerator(tree, {
project: 'mypkg',
main: 'libs/mypkg/index.ts',
});
@ -81,7 +81,7 @@ describe('rollupProjectGenerator', () => {
});
it('should support --tsConfig option', async () => {
await rollupProjectGenerator(tree, {
await configurationGenerator(tree, {
project: 'mypkg',
tsConfig: 'libs/mypkg/tsconfig.custom.json',
});

View File

@ -13,7 +13,7 @@ import { rollupInitGenerator } from '../init/init';
import { RollupExecutorOptions } from '../../executors/rollup/schema';
import { RollupProjectSchema } from './schema';
export async function rollupProjectGenerator(
export async function configurationGenerator(
tree: Tree,
options: RollupProjectSchema
) {
@ -99,8 +99,6 @@ function addBuildTarget(tree: Tree, options: RollupProjectSchema) {
});
}
export default rollupProjectGenerator;
export default configurationGenerator;
export const rollupProjectSchematic = convertNxGenerator(
rollupProjectGenerator
);
export const compat = convertNxGenerator(configurationGenerator);

View File

@ -73,14 +73,15 @@ async function setupBundler(tree: Tree, options: NormalizedSchema) {
];
if (options.bundler === 'webpack') {
const { webpackProjectGenerator } = ensurePackage('@nx/webpack', nxVersion);
await webpackProjectGenerator(tree, {
const { configurationGenerator } = ensurePackage<
typeof import('@nx/webpack')
>('@nx/webpack', nxVersion);
await configurationGenerator(tree, {
project: options.projectName,
main,
tsConfig,
compiler: options.compiler ?? 'babel',
devServer: true,
isolatedConfig: true,
webpackConfig: joinPathFragments(
options.appProjectRoot,
'webpack.config.js'

View File

@ -8,9 +8,10 @@
"description": "Initialize the `@nrwl/webpack` plugin.",
"hidden": true
},
"webpack-project": {
"factory": "./src/generators/webpack-project/webpack-project#webpackProjectSchematic",
"schema": "./src/generators/webpack-project/schema.json",
"configuration": {
"aliases": ["webpack-project"],
"factory": "./src/generators/configuration/configuration#compat",
"schema": "./src/generators/configuration/schema.json",
"description": "Add webpack configuration to a project.",
"hidden": true
}
@ -23,9 +24,10 @@
"aliases": ["ng-add"],
"hidden": true
},
"webpack-project": {
"factory": "./src/generators/webpack-project/webpack-project#webpackProjectGenerator",
"schema": "./src/generators/webpack-project/schema.json",
"configuration": {
"aliases": ["webpack-project"],
"factory": "./src/generators/configuration/configuration",
"schema": "./src/generators/configuration/schema.json",
"description": "Add webpack configuration to a project.",
"hidden": true
}

View File

@ -1,7 +1,13 @@
import { configurationGenerator } from './src/generators/configuration/configuration';
export { configurationGenerator };
// Exported for backwards compatibility in case a plugin is using the old name.
/** @deprecated Use `configurationGenerator` instead. */
export const webpackProjectGenerator = configurationGenerator;
export * from './src/utils/create-copy-plugin';
export * from './src/utils/config';
export * from './src/generators/init/init';
export * from './src/generators/webpack-project/webpack-project';
export type { WebDevServerOptions } from './src/executors/dev-server/schema';
export * from './src/executors/dev-server/dev-server.impl';
export * from './src/executors/webpack/lib/normalize-options';

View File

@ -5,7 +5,7 @@ import {
} from '@nx/devkit';
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
import { webpackProjectGenerator } from './webpack-project';
import configurationGenerator from './configuration';
describe('webpackProject', () => {
let tree: Tree;
@ -20,7 +20,7 @@ describe('webpackProject', () => {
});
it('should generate files', async () => {
await webpackProjectGenerator(tree, {
await configurationGenerator(tree, {
project: 'mypkg',
});
@ -39,7 +39,7 @@ describe('webpackProject', () => {
});
it('should support --main option', async () => {
await webpackProjectGenerator(tree, {
await configurationGenerator(tree, {
project: 'mypkg',
main: 'libs/mypkg/index.ts',
});
@ -59,7 +59,7 @@ describe('webpackProject', () => {
});
it('should support --tsConfig option', async () => {
await webpackProjectGenerator(tree, {
await configurationGenerator(tree, {
project: 'mypkg',
tsConfig: 'libs/mypkg/tsconfig.custom.json',
});
@ -79,7 +79,7 @@ describe('webpackProject', () => {
});
it('should support --devServer option', async () => {
await webpackProjectGenerator(tree, {
await configurationGenerator(tree, {
project: 'mypkg',
devServer: true,
});

View File

@ -9,12 +9,12 @@ import {
} from '@nx/devkit';
import { webpackInitGenerator } from '../init/init';
import { WebpackProjectGeneratorSchema } from './schema';
import { ConfigurationGeneratorSchema } from './schema';
import { WebpackExecutorOptions } from '../../executors/webpack/schema';
export async function webpackProjectGenerator(
export async function configurationGenerator(
tree: Tree,
options: WebpackProjectGeneratorSchema
options: ConfigurationGeneratorSchema
) {
const task = await webpackInitGenerator(tree, {
...options,
@ -35,7 +35,7 @@ export async function webpackProjectGenerator(
function checkForTargetConflicts(
tree: Tree,
options: WebpackProjectGeneratorSchema
options: ConfigurationGeneratorSchema
) {
if (options.skipValidation) return;
@ -54,7 +54,7 @@ function checkForTargetConflicts(
}
}
function addBuildTarget(tree: Tree, options: WebpackProjectGeneratorSchema) {
function addBuildTarget(tree: Tree, options: ConfigurationGeneratorSchema) {
const project = readProjectConfiguration(tree, options.project);
const buildOptions: WebpackExecutorOptions = {
target: options.target,
@ -132,7 +132,7 @@ module.exports = composePlugins(withNx(), (config) => {
});
}
function addServeTarget(tree: Tree, options: WebpackProjectGeneratorSchema) {
function addServeTarget(tree: Tree, options: ConfigurationGeneratorSchema) {
const project = readProjectConfiguration(tree, options.project);
updateProjectConfiguration(tree, options.project, {
...project,
@ -153,8 +153,6 @@ function addServeTarget(tree: Tree, options: WebpackProjectGeneratorSchema) {
});
}
export default webpackProjectGenerator;
export default configurationGenerator;
export const webpackProjectSchematic = convertNxGenerator(
webpackProjectGenerator
);
export const compat = convertNxGenerator(configurationGenerator);

View File

@ -1,4 +1,4 @@
export interface WebpackProjectGeneratorSchema {
export interface ConfigurationGeneratorSchema {
project: string;
main?: string;
tsConfig?: string;