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:
parent
5a59f090fe
commit
68ea2de29d
@ -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.
|
||||||
|
|||||||
@ -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);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user