From 53569af961580afa12b6709ba7ccb947c7968964 Mon Sep 17 00:00:00 2001 From: Steven Nance Date: Thu, 19 Sep 2024 02:55:17 +0200 Subject: [PATCH 1/7] feat: update lab 3 to nx 19.7 --- docs/assets/lab3_build_cmds.png | Bin 55890 -> 0 bytes docs/assets/lab3_cmds.png | Bin 0 -> 66161 bytes docs/assets/lab3_cmds.svg | 244 ++++++++++++++++++ docs/lab3/LAB.md | 56 +++- docs/lab3/SOLUTION.md | 42 ++- .../complete-lab-3/complete-lab-3.spec.ts | 54 ++++ .../complete-lab-3/complete-lab-3.ts | 76 +++++- 7 files changed, 456 insertions(+), 16 deletions(-) delete mode 100644 docs/assets/lab3_build_cmds.png create mode 100644 docs/assets/lab3_cmds.png create mode 100644 docs/assets/lab3_cmds.svg create mode 100644 libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.spec.ts diff --git a/docs/assets/lab3_build_cmds.png b/docs/assets/lab3_build_cmds.png deleted file mode 100644 index 02f47c5955d91ea4456cdc58ff762c8c46bf0931..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55890 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 S<2!W*An+iN}??n@dL|6 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


H1+Rr)4ffhl91VhRU;P7ur6-5&b)ZF8D1+@=ba1 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

`ty@_{?3MgcBdL;FQjr$GH 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 literal 0 HcmV?d00001 diff --git a/docs/assets/lab3_cmds.svg b/docs/assets/lab3_cmds.svg new file mode 100644 index 0000000..1b7266b --- /dev/null +++ b/docs/assets/lab3_cmds.svg @@ -0,0 +1,244 @@ + + + +projectNametargetName.....nxInvoke the Nx CLIas shown in project detailsoptions to send to the targetuse "--help" to see themopen details using "nx show project <project-name> diff --git a/docs/lab3/LAB.md b/docs/lab3/LAB.md index 37621a2..bd1d547 100644 --- a/docs/lab3/LAB.md +++ b/docs/lab3/LAB.md @@ -24,35 +24,69 @@ We'll build the app we just created, and look at what executors are and how to c

🐳   Hint - Nx executor command structure + Nx executor command structure

2. You should now have a `dist` folder - let's open it up! - This is your whole app's output! If we wanted we could push this now to a server and it would all work. - - Notice how we generated a `3rdpartylicenses.txt` file and how all files have hashes in suffix - - Open one of the files, for example `main.{hash}.js` and look at it's contents. Notice how it's minified. + - Notice how all files have hashes in their suffix + - Open one of the files, for example `main.{hash}.js` and look at its contents. Notice how it's minified.
-3. **Open up `apps/store/project.json`** and look at the object under `targets/build` +3. Open the **Project Details** for your `store` app and expand the `build` section listed under "Targets" - - this is the **target**, and it has an **executor** option, that points to `@nx/webpack:webpack` - - Remember how we copied some images into our `/assets` folder earlier? Look through the executor options and try to find how it knows to include them in the final build! + - This is a **target**, that uses the [`nx:run-commands`](https://nx.dev/nx-api/nx/executors/run-commands#nxruncommands) **executor** to call `webpack-cli` to build the app + - Since build target uses the [`webpack-cli`](https://webpack.js.org/api/cli/) like you would with any other webpack build, you can configure webpack using the `webpack.config.js` file in your project. + +
+ 🐳   Hint + The easiest way to open the Project Details, is by using the Nx Console from within VS Code or a JetBrains IDEs. Once installed, you can access the Project Details Views in multiple ways without leaving your editor. +

+ + If you prefer to use the CLI, or are using an editor without Nx Console support, you can also open the project details in your browser by running `nx show project --web`. +

+ +4. Configure license extraction during production builds + + - Explore the `webpack.config.js` file for the `store` app + - Remember how we copied some images into our `/assets` folder earlier? Look through the webpack config and try to find how it knows to include them in the final build!
+ - Configure webpack to `extractLicenses` into a `3rdpartylicenses.txt` file during build, but only when the node environment is `production` +
+ 🐳   Hint + + The `NxAppWebpackPlugin` takes an `extractLicenses` option. + +

-4. Send a flag to the executor so that it builds for development +5. Build the app again + + - Notice how we now have a `3rdpartylicenses.txt` file in the `dist` folder + +6. Add a `development` configuration to the `build` target that changes the `node-env` argument to `development` + + - Nx detects the presence tooling configuration, in this case `webpack.config.js`, and automatically [infers targets](https://nx.dev/concepts/inferred-tasks) needed to run that tool with set of common defaults (`build`, `preview`, `serve` in this case) + - These targets can be modified by adding additional configuration to the `targets` key in the project.json + - Targets can have multiple configurations that allow for execution of the same tool with different options
🐳   Hint - `--configuration=development` + - The key you need to add to the `project.json` is `targets.build.configurations.development.args` + - Use the Project Details view to see how the environment is being set to production as an example

-5. Open up the `dist` folder again - notice how the `3rdpartylicenses.txt` file is gone, as per the "development" configuration in `project.json`. Also notice how filenames no longer have hashed suffixes. Open one of the files, for example `main.{hash}.js`. Notice how its content is now fully readable and there are sourcemaps attached to each of the compiled files. -
+7. Build the app one more time, but this time using the development configuration we just created +
+ 🐳   Hint + + `--configuration=development` + +

-6. The **serve** target (located a bit lower in `project.json`) also contains a executor, that _uses_ the output from the **build** target +8. Open up the `dist` folder again - notice how the `3rdpartylicenses.txt` file is gone, as per the "development" configuration in `project.json`. Also notice how filenames no longer have hashed suffixes. Open one of the files, for example `main.{hash}.js`. Notice how its content is now fully readable and there are sourcemaps attached to each of the compiled files.
--- diff --git a/docs/lab3/SOLUTION.md b/docs/lab3/SOLUTION.md index 8fc07b2..6d65007 100644 --- a/docs/lab3/SOLUTION.md +++ b/docs/lab3/SOLUTION.md @@ -1,7 +1,45 @@ -##### To build the app for production: +##### 1. To build the app: `nx build store` -##### To build the app for development: +##### 4. To configure webpack to extract licenses only during production builds: + +In `apps/store/webpack.config.js`: + +```js +module.exports = { + // ... + plugins: [ + // ... + new NxAppWebpackPlugin({ + // ... + extractLicenses: process.env['NODE_ENV'] === 'production', + }), + // ... + ], + // ... +}; +``` + +##### 7. To add a development configuration to the build target: + +In `apps/store/project.json`: + +```json +{ + // ... + "targets": { + "build": { + "configurations": { + "development": { + "args": ["--node-env=development"] + } + } + } + } +} +``` + +##### 7. To build the app using the development configuration: `nx build store --configuration=development` diff --git a/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.spec.ts b/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.spec.ts new file mode 100644 index 0000000..a103027 --- /dev/null +++ b/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.spec.ts @@ -0,0 +1,54 @@ +import { addProjectConfiguration, readJson, Tree } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import update from './complete-lab-3'; + +function exampleWebpackConfig(additionalConfig = '') { + return ` +module.exports = { + plugins: [ + new NxAppWebpackPlugin({ + foo: 'bar', + optimization: process.env['NODE_ENV'] === 'production', + ${additionalConfig} + }), + ], +}; +`; +} + +describe('complete-lab-3', () => { + let tree: Tree; + + beforeEach(() => { + tree = createTreeWithEmptyWorkspace(); + addProjectConfiguration(tree, 'store', { root: 'apps/store', targets: {} }); + }); + + it('should add extractLicenses to the NxAppWebpackPlugin configuration', async () => { + tree.write('apps/store/webpack.config.js', exampleWebpackConfig()); + + await update(tree); + + expect(readJson(tree, 'apps/store/project.json')).toHaveProperty( + 'targets.build.configurations.development.args', + ['--node-env=development'] + ); + + expect(tree.read('apps/store/webpack.config.js', 'utf-8')).toContain( + `extractLicenses: process.env['NODE_ENV'] === 'production'` + ); + }); + + it('should replace extractLicenses to NxAppWebpackPlugin if it already exists', async () => { + tree.write( + 'apps/store/webpack.config.js', + exampleWebpackConfig('extractLicenses: true') + ); + + await update(tree); + + expect(tree.read('apps/store/webpack.config.js', 'utf-8')).toContain( + `extractLicenses: process.env['NODE_ENV'] === 'production'` + ); + }); +}); diff --git a/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts b/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts index 7cd9881..8359a8c 100644 --- a/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts +++ b/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts @@ -1,6 +1,76 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import { Tree } from '@nx/devkit'; +import { tsquery } from '@phenomnomnominal/tsquery'; +import { formatFiles, Tree, updateJson } from '@nx/devkit'; +import ts = require('typescript'); -export default function update(host: Tree) { +// deeply set a property where parent properties are created if they don't exist +function setProperty(obj: Record, path: string, value: any) { + return path + .split('.') + .reduce( + (acc, key, index, arr) => + (acc[key] = index === arr.length - 1 ? value : acc[key] || {}), + obj + ); +} + +function addExtractLicensesProperty(webpackConfig: string) { + const ast = tsquery.ast(webpackConfig); + const query = `NewExpression:has(Identifier[name="NxAppWebpackPlugin"]) ObjectLiteralExpression`; + const [config] = tsquery(ast, query); + + if (!config) { + throw new Error('NxAppWebpackPlugin configuration not found'); + } + + const newProperty = ts.factory.createPropertyAssignment( + 'extractLicenses', + ts.factory.createBinaryExpression( + ts.factory.createElementAccessExpression( + ts.factory.createIdentifier('process.env'), + ts.factory.createStringLiteral('NODE_ENV') + ), + ts.SyntaxKind.EqualsEqualsEqualsToken, + ts.factory.createStringLiteral('production') + ) + ); + + const index = config.properties.findIndex( + (prop) => + ts.isPropertyAssignment(prop) && + ts.isIdentifier(prop.name) && + prop.name.escapedText === 'extractLicenses' + ); + + // config.properties is an immutable node array so we cast + // a mutable array to simplify our implementation + const configProperties: ts.ObjectLiteralElementLike[] = + config.properties as any; + + if (index !== -1) { + configProperties[index] = newProperty; + } else { + configProperties.push(newProperty); + } + + return ts.createPrinter().printFile(ast); +} + +export default async function update(tree: Tree) { // no file changes + + const webpackConfig = tree.read('apps/store/webpack.config.js', 'utf-8'); + tree.write( + 'apps/store/webpack.config.js', + addExtractLicensesProperty(webpackConfig) + ); + + updateJson(tree, 'apps/store/project.json', (json) => { + setProperty(json, 'targets.build.configurations.development.args', [ + '--node-env=development', + ]); + + return json; + }); + + await formatFiles(tree); } From e195fd837bb33c6e5c0b816e9ad50806a089d29c Mon Sep 17 00:00:00 2001 From: Steven Nance Date: Thu, 19 Sep 2024 02:58:02 +0200 Subject: [PATCH 2/7] proof read --- docs/lab3/LAB.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/lab3/LAB.md b/docs/lab3/LAB.md index bd1d547..5b0856b 100644 --- a/docs/lab3/LAB.md +++ b/docs/lab3/LAB.md @@ -7,7 +7,7 @@ We'll build the app we just created, and look at what executors are and how to c ## 📚 Learning outcomes: - **Understand what a `target` and `executor` are** -- **Invoking executors** +- **Invoke executors** - **Configure executors by passing them different options** - **Understand how an executor can invoke another executor** @@ -29,19 +29,19 @@ We'll build the app we just created, and look at what executors are and how to c 2. You should now have a `dist` folder - let's open it up! - - This is your whole app's output! If we wanted we could push this now to a server and it would all work. - - Notice how all files have hashes in their suffix - - Open one of the files, for example `main.{hash}.js` and look at its contents. Notice how it's minified. + - This is your whole app's output! If we wanted to, we could push this to a server, and it would all work. + - Notice how all files have hashes in their suffix. + - Open one of the files, for example, `main.{hash}.js`, and look at its contents. Notice how it's minified.
-3. Open the **Project Details** for your `store` app and expand the `build` section listed under "Targets" +3. Open the **Project Details** for your `store` app and expand the `build` section listed under "Targets." - - This is a **target**, that uses the [`nx:run-commands`](https://nx.dev/nx-api/nx/executors/run-commands#nxruncommands) **executor** to call `webpack-cli` to build the app - - Since build target uses the [`webpack-cli`](https://webpack.js.org/api/cli/) like you would with any other webpack build, you can configure webpack using the `webpack.config.js` file in your project. + - This is a **target** that uses the [`nx:run-commands`](https://nx.dev/nx-api/nx/executors/run-commands#nxruncommands) **executor** to call `webpack-cli` to build the app. + - Since the build target uses the [`webpack-cli`](https://webpack.js.org/api/cli/), like you would with any other webpack build, you can configure webpack using the `webpack.config.js` file in your project.
🐳   Hint - The easiest way to open the Project Details, is by using the Nx Console from within VS Code or a JetBrains IDEs. Once installed, you can access the Project Details Views in multiple ways without leaving your editor. + The easiest way to open the Project Details is by using the Nx Console from within VS Code or a JetBrains IDE. Once installed, you can access the Project Details Views in multiple ways without leaving your editor.

If you prefer to use the CLI, or are using an editor without Nx Console support, you can also open the project details in your browser by running `nx show project --web`. @@ -49,10 +49,10 @@ We'll build the app we just created, and look at what executors are and how to c 4. Configure license extraction during production builds - - Explore the `webpack.config.js` file for the `store` app + - Explore the `webpack.config.js` file for the `store` app. - Remember how we copied some images into our `/assets` folder earlier? Look through the webpack config and try to find how it knows to include them in the final build!
- - Configure webpack to `extractLicenses` into a `3rdpartylicenses.txt` file during build, but only when the node environment is `production` + - Configure webpack to `extractLicenses` into a `3rdpartylicenses.txt` file during the build, but only when the node environment is `production`.
🐳   Hint @@ -62,23 +62,23 @@ We'll build the app we just created, and look at what executors are and how to c 5. Build the app again - - Notice how we now have a `3rdpartylicenses.txt` file in the `dist` folder + - Notice how we now have a `3rdpartylicenses.txt` file in the `dist` folder. -6. Add a `development` configuration to the `build` target that changes the `node-env` argument to `development` +6. Add a `development` configuration to the `build` target that changes the `node-env` argument to `development`. - - Nx detects the presence tooling configuration, in this case `webpack.config.js`, and automatically [infers targets](https://nx.dev/concepts/inferred-tasks) needed to run that tool with set of common defaults (`build`, `preview`, `serve` in this case) - - These targets can be modified by adding additional configuration to the `targets` key in the project.json - - Targets can have multiple configurations that allow for execution of the same tool with different options + - Nx detects the presence of tooling configuration, in this case `webpack.config.js`, and automatically [infers targets](https://nx.dev/concepts/inferred-tasks) needed to run that tool with a set of common defaults (`build`, `preview`, `serve` in this case). + - These targets can be modified by adding additional configuration to the `targets` key in the `project.json`. + - Targets can have multiple configurations that allow for the execution of the same tool with different options.
🐳   Hint - - The key you need to add to the `project.json` is `targets.build.configurations.development.args` - - Use the Project Details view to see how the environment is being set to production as an example + - The key you need to add to the `project.json` is `targets.build.configurations.development.args`. + - Use the Project Details view to see how the environment is being set to production as an example.

-7. Build the app one more time, but this time using the development configuration we just created +7. Build the app one more time, but this time using the development configuration we just created.
🐳   Hint @@ -86,7 +86,7 @@ We'll build the app we just created, and look at what executors are and how to c

-8. Open up the `dist` folder again - notice how the `3rdpartylicenses.txt` file is gone, as per the "development" configuration in `project.json`. Also notice how filenames no longer have hashed suffixes. Open one of the files, for example `main.{hash}.js`. Notice how its content is now fully readable and there are sourcemaps attached to each of the compiled files. +8. Open up the `dist` folder again - notice how the `3rdpartylicenses.txt` file is gone, as per the "development" configuration in `project.json`. Also, notice how filenames no longer have hashed suffixes. Open one of the files, for example `main.{hash}.js`. Notice how its content is now fully readable, and there are sourcemaps attached to each of the compiled files.
--- From 578914d39b3e892cdb3e2baa1f4094a449c8d909 Mon Sep 17 00:00:00 2001 From: Steven Nance Date: Thu, 19 Sep 2024 02:59:09 +0200 Subject: [PATCH 3/7] remove incorrect comment --- .../src/migrations/complete-lab-3/complete-lab-3.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts b/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts index 8359a8c..1b210f7 100644 --- a/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts +++ b/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts @@ -56,8 +56,6 @@ function addExtractLicensesProperty(webpackConfig: string) { } export default async function update(tree: Tree) { - // no file changes - const webpackConfig = tree.read('apps/store/webpack.config.js', 'utf-8'); tree.write( 'apps/store/webpack.config.js', From 9152afce03934692b3732b1f5f0fc2c3e4e844b3 Mon Sep 17 00:00:00 2001 From: Steven Nance Date: Fri, 20 Sep 2024 01:45:48 +0200 Subject: [PATCH 4/7] refactor: remove need to typcast by using ts.transform --- docs/lab3/SOLUTION.md | 10 ++- .../complete-lab-3/complete-lab-3.ts | 83 ++++++++++++------- 2 files changed, 62 insertions(+), 31 deletions(-) diff --git a/docs/lab3/SOLUTION.md b/docs/lab3/SOLUTION.md index 6d65007..80b8cd2 100644 --- a/docs/lab3/SOLUTION.md +++ b/docs/lab3/SOLUTION.md @@ -1,6 +1,8 @@ ##### 1. To build the app: -`nx build store` +```sh +nx build store +``` ##### 4. To configure webpack to extract licenses only during production builds: @@ -21,7 +23,7 @@ module.exports = { }; ``` -##### 7. To add a development configuration to the build target: +##### 6. To add a development configuration to the build target: In `apps/store/project.json`: @@ -42,4 +44,6 @@ In `apps/store/project.json`: ##### 7. To build the app using the development configuration: -`nx build store --configuration=development` +```sh +nx build store --configuration=development +``` diff --git a/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts b/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts index 1b210f7..50fd21f 100644 --- a/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts +++ b/libs/nx-react-workshop/src/migrations/complete-lab-3/complete-lab-3.ts @@ -13,6 +13,46 @@ function setProperty(obj: Record, path: string, value: any) { ); } +const addOrUpdateProperty = + (propertyName: string | ts.PropertyName, propertyValue: ts.Expression) => + (objectToUpdate: ts.ObjectLiteralExpression): ts.ObjectLiteralExpression => { + const newProperty = ts.factory.createPropertyAssignment( + propertyName, + propertyValue + ); + + const existingPropertyIndex = objectToUpdate.properties.findIndex( + (prop) => prop.name === propertyName + ); + + const updatedProperties = [...objectToUpdate.properties]; + if (existingPropertyIndex === -1) { + updatedProperties.push(newProperty); + } else { + updatedProperties[existingPropertyIndex] = newProperty; + } + + return ts.factory.updateObjectLiteralExpression( + objectToUpdate, + updatedProperties + ); + }; + +const updateMatchingObjectLiteral = + ( + objectToUpdate: ts.ObjectLiteralExpression, + transform: (o: ts.ObjectLiteralExpression) => ts.ObjectLiteralExpression + ): ts.TransformerFactory => + (context) => + (sourceFile) => { + const visit: ts.Visitor = (node) => + ts.isObjectLiteralExpression(node) && node === objectToUpdate + ? transform(node) + : ts.visitEachChild(node, visit, context); + + return ts.visitNode(sourceFile, visit) as ts.SourceFile; + }; + function addExtractLicensesProperty(webpackConfig: string) { const ast = tsquery.ast(webpackConfig); const query = `NewExpression:has(Identifier[name="NxAppWebpackPlugin"]) ObjectLiteralExpression`; @@ -22,37 +62,24 @@ function addExtractLicensesProperty(webpackConfig: string) { throw new Error('NxAppWebpackPlugin configuration not found'); } - const newProperty = ts.factory.createPropertyAssignment( - 'extractLicenses', - ts.factory.createBinaryExpression( - ts.factory.createElementAccessExpression( - ts.factory.createIdentifier('process.env'), - ts.factory.createStringLiteral('NODE_ENV') - ), - ts.SyntaxKind.EqualsEqualsEqualsToken, - ts.factory.createStringLiteral('production') - ) - ); - - const index = config.properties.findIndex( - (prop) => - ts.isPropertyAssignment(prop) && - ts.isIdentifier(prop.name) && - prop.name.escapedText === 'extractLicenses' + // process.env['NODE_ENV'] === 'production' + const newPropertyValue = ts.factory.createBinaryExpression( + ts.factory.createElementAccessExpression( + ts.factory.createIdentifier('process.env'), + ts.factory.createStringLiteral('NODE_ENV') + ), + ts.SyntaxKind.EqualsEqualsEqualsToken, + ts.factory.createStringLiteral('production') ); - // config.properties is an immutable node array so we cast - // a mutable array to simplify our implementation - const configProperties: ts.ObjectLiteralElementLike[] = - config.properties as any; - - if (index !== -1) { - configProperties[index] = newProperty; - } else { - configProperties.push(newProperty); - } + const result = ts.transform(ast, [ + updateMatchingObjectLiteral( + config, + addOrUpdateProperty('extractLicenses', newPropertyValue) + ), + ]); - return ts.createPrinter().printFile(ast); + return ts.createPrinter().printFile(result.transformed[0]); } export default async function update(tree: Tree) { From ecc5384a915cf86603edbfa94f07db2f366045c3 Mon Sep 17 00:00:00 2001 From: Steven Nance Date: Fri, 20 Sep 2024 02:12:10 +0200 Subject: [PATCH 5/7] docs: use consistent language --- docs/lab3/LAB.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/lab3/LAB.md b/docs/lab3/LAB.md index 5b0856b..55607c8 100644 --- a/docs/lab3/LAB.md +++ b/docs/lab3/LAB.md @@ -7,9 +7,9 @@ We'll build the app we just created, and look at what executors are and how to c ## 📚 Learning outcomes: - **Understand what a `target` and `executor` are** +- **Understand how to view Project Details** - **Invoke executors** - **Configure executors by passing them different options** -- **Understand how an executor can invoke another executor** #### 📲 After this workshop, you should have: @@ -27,24 +27,24 @@ We'll build the app we just created, and look at what executors are and how to c Nx executor command structure

-2. You should now have a `dist` folder - let's open it up! +2. There should be a `dist` folder in the root of the workspace- let's open it up! - - This is your whole app's output! If we wanted to, we could push this to a server, and it would all work. + - This is the whole app's output! If we wanted to, we could push this to a server, and it would all work. - Notice how all files have hashes in their suffix. - Open one of the files, for example, `main.{hash}.js`, and look at its contents. Notice how it's minified.
-3. Open the **Project Details** for your `store` app and expand the `build` section listed under "Targets." +3. Open the **Project Details** for the `store` app and expand the `build` section listed under "Targets." - This is a **target** that uses the [`nx:run-commands`](https://nx.dev/nx-api/nx/executors/run-commands#nxruncommands) **executor** to call `webpack-cli` to build the app. - - Since the build target uses the [`webpack-cli`](https://webpack.js.org/api/cli/), like you would with any other webpack build, you can configure webpack using the `webpack.config.js` file in your project. + - Since the build target uses the [`webpack-cli`](https://webpack.js.org/api/cli/), webpack can be configured using the `webpack.config.js` file in the project root.
🐳   Hint - The easiest way to open the Project Details is by using the Nx Console from within VS Code or a JetBrains IDE. Once installed, you can access the Project Details Views in multiple ways without leaving your editor. + The easiest way to open the Project Details is by using the Nx Console from within VS Code or a JetBrains IDE. Once installed, the Project Details Views can be accessed in multiple ways without leaving the editor.

- If you prefer to use the CLI, or are using an editor without Nx Console support, you can also open the project details in your browser by running `nx show project --web`. + If the CLI is preferred, or editor without Nx Console support is being used, the project details can be opened in the browser by running `nx show project --web`.

4. Configure license extraction during production builds @@ -73,7 +73,7 @@ We'll build the app we just created, and look at what executors are and how to c
🐳   Hint - - The key you need to add to the `project.json` is `targets.build.configurations.development.args`. + - The key to add to the `project.json` is `targets.build.configurations.development.args`. - Use the Project Details view to see how the environment is being set to production as an example.

From d5a45dae651ec56c68a3d0d4875c2c2c31d38a9d Mon Sep 17 00:00:00 2001 From: Steven Nance Date: Fri, 20 Sep 2024 02:13:08 +0200 Subject: [PATCH 6/7] formatting --- docs/lab3/LAB.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/lab3/LAB.md b/docs/lab3/LAB.md index 55607c8..ed43db9 100644 --- a/docs/lab3/LAB.md +++ b/docs/lab3/LAB.md @@ -27,7 +27,7 @@ We'll build the app we just created, and look at what executors are and how to c Nx executor command structure

-2. There should be a `dist` folder in the root of the workspace- let's open it up! +2. There should be a `dist` folder in the root of the workspace -- let's open it up! - This is the whole app's output! If we wanted to, we could push this to a server, and it would all work. - Notice how all files have hashes in their suffix. From 1949dc02889b3fa76b4aaef37578ff8e5f9c5483 Mon Sep 17 00:00:00 2001 From: Steven Nance Date: Fri, 20 Sep 2024 02:15:06 +0200 Subject: [PATCH 7/7] consistent spacing --- docs/lab3/LAB.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/lab3/LAB.md b/docs/lab3/LAB.md index ed43db9..b94afa2 100644 --- a/docs/lab3/LAB.md +++ b/docs/lab3/LAB.md @@ -27,18 +27,20 @@ We'll build the app we just created, and look at what executors are and how to c Nx executor command structure
-2. There should be a `dist` folder in the root of the workspace -- let's open it up! +2. There should be a `dist` folder in the root of the workspace -- lets open it up! - This is the whole app's output! If we wanted to, we could push this to a server, and it would all work. - Notice how all files have hashes in their suffix. - Open one of the files, for example, `main.{hash}.js`, and look at its contents. Notice how it's minified. -
+ +
3. Open the **Project Details** for the `store` app and expand the `build` section listed under "Targets." - This is a **target** that uses the [`nx:run-commands`](https://nx.dev/nx-api/nx/executors/run-commands#nxruncommands) **executor** to call `webpack-cli` to build the app. - Since the build target uses the [`webpack-cli`](https://webpack.js.org/api/cli/), webpack can be configured using the `webpack.config.js` file in the project root. +
🐳   Hint The easiest way to open the Project Details is by using the Nx Console from within VS Code or a JetBrains IDE. Once installed, the Project Details Views can be accessed in multiple ways without leaving the editor. @@ -51,8 +53,9 @@ We'll build the app we just created, and look at what executors are and how to c - Explore the `webpack.config.js` file for the `store` app. - Remember how we copied some images into our `/assets` folder earlier? Look through the webpack config and try to find how it knows to include them in the final build! -
- Configure webpack to `extractLicenses` into a `3rdpartylicenses.txt` file during the build, but only when the node environment is `production`. + +
🐳   Hint @@ -64,12 +67,15 @@ We'll build the app we just created, and look at what executors are and how to c - Notice how we now have a `3rdpartylicenses.txt` file in the `dist` folder. +
+ 6. Add a `development` configuration to the `build` target that changes the `node-env` argument to `development`. - Nx detects the presence of tooling configuration, in this case `webpack.config.js`, and automatically [infers targets](https://nx.dev/concepts/inferred-tasks) needed to run that tool with a set of common defaults (`build`, `preview`, `serve` in this case). - These targets can be modified by adding additional configuration to the `targets` key in the `project.json`. - Targets can have multiple configurations that allow for the execution of the same tool with different options. +
🐳   Hint