darraghoriordan / eslint-plugin-nestjs-typed

Some eslint rules for working with NestJs projects
http://www.darraghoriordan.com
171 stars 34 forks source link

Update tutorial on publishing #56

Closed grosch-intl closed 1 year ago

grosch-intl commented 1 year ago

I got here after reading your https://www.darraghoriordan.com/2021/11/06/how-to-write-an-eslint-plugin-typescript/ article, which was a huge help. However, the piece that's missing for me is once I'm done, how to publish to an npm repo so it's usable. Looking at this repo I don't see publish details.

For example, your NPM module, when I install it, looks quite different than my structure. Where'd the index.d.ts file you publish come from? If you would be willing to update your tutorial, that would be really helpful. Thanks.

darraghoriordan commented 1 year ago

hey,

i'll write that up when i get a chance but in the meantime:

Publishing starts in this github workflow: https://github.com/darraghoriordan/eslint-plugin-nestjs-typed/blob/main/.github/workflows/publishToNpm.yaml

I run this script:"build": "npm run clean && mkdir ./dist && tsc --project tsconfig.build.json", with yarn build. Which creates "dist" directory and files.

Release is based on semantic commits with semantic-release so a "feat:" results in a publish, a "fix:" results in a publish, a "chore:" does not.

The publish steps are defined in the package.json "release" section. This is a config that semantic-release uses to prepare and publish the build. My config says 'any change in "main" should release'. You can read more about semantic release in their github repo. It handles most of the tasks by default, you can see the config i have to set is very light.

Semantic-release kicks in which uses npm (package.json) functionality. I have a "files" section in package.json which tells semantic-release what to deploy to npm.

so to summarize: the things built by tsc in yarn build are packaged by semantic-release becuase i have listed them in the "files" section and sent to npm using my token.

My tsconfig.common.json specifies "declaration": true which is where the .d.ts is comfing from

grosch-intl commented 1 year ago

Thanks! I'm getting closer. The "files" and "declaration" parts were missing in my configuration. I'm not using sematic-release yet though. When I look in what gets installed I now have this:

$ cd node_modules/\@crp/eslint-plugin-angular $ ls -R .: README.md dist/ node_modules/ package.json

./dist: configs/ index.d.ts index.js rules/ selector.d.ts selector.js utils.d.ts utils.js

./dist/configs: recommended.d.ts recommended.js

./dist/rules: no-common-module.d.ts no-common-module.js no-component-constructor.d.ts no-component-constructor.js provide-in-component.d.ts provide-in-component.js

./node_modules:

And then in my .eslintrc.json I told it to use that plugin and the recommended config:

      "plugins": [
        "@crp/angular"
      ],
      "extends": [
        "eslint:recommended",
        "plugin:@angular-eslint/recommended",
        "plugin:@typescript-eslint/recommended",
        "plugin:@crp/angular/recommended"
      ],

When I then try to lint, it gives me this error:

An unhandled exception occurred: Failed to load config "plugin:@crp/angular/recommended" to extend from.

The generated recommended.d.ts file looks like this:

declare const _default: {
    parser: string;
    parserOptions: {
        sourceType: string;
    };
    rules: {
        "@crp/angular/no-common-module": string;
        "@crp/angular/no-component-constructor": string;
        "@crp/angular/provide-in-component": (string | {
            ControlValueAccessor: {
                provide: string;
                multi: boolean;
                type: string;
                useExisting: boolean;
            };
            Validators: {
                provide: string;
                multi: boolean;
                type: string;
                useExisting: boolean;
            };
        })[];
    };
};
export default _default;
darraghoriordan commented 1 year ago

closing because not an issue with this library