feat(nx-plugin): use package and e2e folder instead of libs and apps in create-nx-plugin command (#3120)

* feat(nx-plugin): use package and e2e folder instead of libs and apps in create-nx-plugin command

* feat(nx-plugin): remove console log
This commit is contained in:
Jonathan Cammisuli 2020-06-05 21:51:53 -04:00 committed by GitHub
parent 5a59f090fe
commit 68ea2de29d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 29 deletions

View File

@ -23,15 +23,14 @@ After executing the above command, the following tree structure is created:
```treeview ```treeview
my-org/ my-org/
├── apps/ ├── e2e/
│ └── my-plugin-e2e/ │ └── my-plugin-e2e/
│ ├── jest.config.js │ ├── jest.config.js
│ ├── tests/ │ ├── tests/
│ │ └── my-plugin.test.ts │ │ └── my-plugin.test.ts
│ ├── tsconfig.json │ ├── tsconfig.json
│ └── tsconfig.spec.json │ └── tsconfig.spec.json
├── jest.config.js ├── packages/
├── libs/
│ └── my-plugin/ │ └── my-plugin/
│ ├── README.md │ ├── README.md
│ ├── builders.json │ ├── builders.json
@ -58,11 +57,12 @@ my-org/
│ ├── tsconfig.json │ ├── tsconfig.json
│ ├── tsconfig.lib.json │ ├── tsconfig.lib.json
│ └── tsconfig.spec.json │ └── tsconfig.spec.json
├── nx.json
├── package.json
├── tools ├── tools
│ ├── schematics/ │ ├── schematics/
│ └── tsconfig.tools.json │ └── tsconfig.tools.json
├── jest.config.js
├── nx.json
├── package.json
├── tsconfig.json ├── tsconfig.json
├── workspace.json ├── workspace.json
└── yarn.lock └── yarn.lock
@ -188,7 +188,7 @@ We'll go over a few parts of a test file below:
```typescript ```typescript
it('should create my-plugin', async (done) => { it('should create my-plugin', async (done) => {
const plugin = uniq('my-plugin'); const plugin = uniq('my-plugin');
ensureNxProject('@my-org/my-plugin', 'dist/libs/my-plugin'); ensureNxProject('@my-org/my-plugin', 'dist/packages/my-plugin');
await runNxCommandAsync(`generate @my-org/my-plugin:myPlugin ${plugin}`); await runNxCommandAsync(`generate @my-org/my-plugin:myPlugin ${plugin}`);
const result = await runNxCommandAsync(`build ${plugin}`); const result = await runNxCommandAsync(`build ${plugin}`);
@ -216,19 +216,19 @@ To make sure that assets are copied to the dist folder, open the `workspace.json
"options": { "options": {
// shortened... // shortened...
"assets": [ "assets": [
"libs/my-plugin/*.md", "packages/my-plugin/*.md",
{ {
"input": "./libs/my-plugin/src", "input": "./packages/my-plugin/src",
"glob": "**/*.!(ts)", "glob": "**/*.!(ts)",
"output": "./src" "output": "./src"
}, },
{ {
"input": "./libs/my-plugin", "input": "./packages/my-plugin",
"glob": "collection.json", "glob": "collection.json",
"output": "." "output": "."
}, },
{ {
"input": "./libs/my-plugin", "input": "./packages/my-plugin",
"glob": "builders.json", "glob": "builders.json",
"output": "." "output": "."
} }
@ -242,7 +242,7 @@ To make sure that assets are copied to the dist folder, open the `workspace.json
To publish your plugin follow these steps: To publish your plugin follow these steps:
1. Build your plugin with the command `nx run my-plugin:build` 1. Build your plugin with the command `nx run my-plugin:build`
1. `npm publish ./dist/libs/my-plugin` and follow the prompts from npm. 1. `npm publish ./dist/package/my-plugin` and follow the prompts from npm.
1. That's it! 1. That's it!
> Note: currently you will have to modify the `package.json` version by yourself or with a tool. > Note: currently you will have to modify the `package.json` version by yourself or with a tool.

View File

@ -1,12 +1,15 @@
#!/usr/bin/env node #!/usr/bin/env node
// we can import from '@nrwl/workspace' because it will require typescript // we can't import from '@nrwl/workspace' because it will require typescript
// eslint-disable-next-line @nrwl/nx/enforce-module-boundaries
import { output } from '@nrwl/workspace/src/utils/output'; import { output } from '@nrwl/workspace/src/utils/output';
import { dirSync } from 'tmp'; import { dirSync } from 'tmp';
import { writeFileSync } from 'fs-extra'; import { writeFileSync, readFileSync, removeSync } from 'fs-extra';
import * as path from 'path'; import * as path from 'path';
import { execSync } from 'child_process'; import { execSync } from 'child_process';
import * as inquirer from 'inquirer'; import * as inquirer from 'inquirer';
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
import yargsParser = require('yargs-parser'); import yargsParser = require('yargs-parser');
import { determinePackageManager, showNxWarning } from './shared'; import { determinePackageManager, showNxWarning } from './shared';
@ -23,22 +26,6 @@ const parsedArgs = yargsParser(process.argv, {
boolean: ['help'], boolean: ['help'],
}); });
if (parsedArgs.help) {
showHelp();
process.exit(0);
}
const packageManager = determinePackageManager();
determineWorkspaceName(parsedArgs).then((workspaceName) => {
return determinePluginName(parsedArgs).then((pluginName) => {
const tmpDir = createSandbox(packageManager);
createWorkspace(tmpDir, packageManager, parsedArgs, workspaceName);
createNxPlugin(workspaceName, pluginName);
commitChanges(workspaceName);
showNxWarning(workspaceName);
});
});
function createSandbox(packageManager: string) { function createSandbox(packageManager: string) {
console.log(`Creating a sandbox with Nx...`); console.log(`Creating a sandbox with Nx...`);
const tmpDir = dirSync().name; const tmpDir = dirSync().name;
@ -103,6 +90,22 @@ function createNxPlugin(workspaceName, pluginName) {
); );
} }
function updateWorkspace(workspaceName: string) {
const nxJsonPath = path.join(workspaceName, 'nx.json');
const nxJson = JSON.parse(readFileSync(nxJsonPath).toString('UTF-8'));
nxJson['workspaceLayout'] = {
appsDir: 'e2e',
libsDir: 'packages',
};
writeFileSync(nxJsonPath, JSON.stringify(nxJson, undefined, 2));
removeSync(path.join(workspaceName, 'apps'));
removeSync(path.join(workspaceName, 'libs'));
}
function commitChanges(workspaceName) { function commitChanges(workspaceName) {
execSync('git add .', { execSync('git add .', {
cwd: workspaceName, cwd: workspaceName,
@ -181,3 +184,20 @@ function showHelp() {
pluginName the name of the plugin to be created pluginName the name of the plugin to be created
`); `);
} }
if (parsedArgs.help) {
showHelp();
process.exit(0);
}
const packageManager = determinePackageManager();
determineWorkspaceName(parsedArgs).then((workspaceName) => {
return determinePluginName(parsedArgs).then((pluginName) => {
const tmpDir = createSandbox(packageManager);
createWorkspace(tmpDir, packageManager, parsedArgs, workspaceName);
updateWorkspace(workspaceName);
createNxPlugin(workspaceName, pluginName);
commitChanges(workspaceName);
showNxWarning(workspaceName);
});
});