Awesome
ngx-deploy-npm đ <!-- omit in toc -->
<!-- Images --> <!-- URLs -->
Publish your libraries to NPM with one command <!-- omit in toc -->
Table of contents:
- đ Quick Start (local development)
- đ Continuous Delivery
- đĻ Options
- Compatibility overview with Nx
- đ Configuration File
- đ§ Essential considerations
- đ Do you Want to Contribute?
- License
- Recognitions
đ Quick Start (local development) <a name="quick-start-local-development"></a>
-
Add
ngx-deploy-npm
to your project. It will configure all your publishable libraries present in the project:npm install --save-dev ngx-deploy-npm nx generate ngx-deploy-npm:install
-
Deploy your library to NPM with all default settings.
nx deploy your-library --dry-run
-
When you are happy with the result, remove the
--dry-run
option
đ Continuous Delivery <a name="continuous-delivery"></a>
Independently of the CI/CD you are using, you need an NPM token. To do so, you have two methods.
- Via NPM web page
- Using
npm token create
CircleCI <!-- omit in toc -->
-
Set the env variable
- On your project setting the env variable. Let's call it
NPM_TOKEN
- On your project setting the env variable. Let's call it
-
Indicate how to find the token
- Before publishing, we must indicate to npm how to find that token,
do it by creating a step with
run: echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' > YOUR_REPO_DIRECTORY/.npmrc
- Replace
YOUR_REPO_DIRECTORY
for the path of your project, commonly is/home/circleci/repo
- Before publishing, we must indicate to npm how to find that token,
do it by creating a step with
-
(Optional) check that you are logged
- Creating a step with
run: npm whoami
- The output should be the username of your npm account
- Creating a step with
-
Deploy your package
-
Create a step with:
nx deploy your-library
-
-
Enjoy your just-released package đđĻ
The complete job example is:
# .circleci/config.yml
jobs:
init-deploy:
executor: my-executor
steps:
- attach_workspace:
at: /home/circleci/repo/
# Set NPM token to be able to publish
- run: echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' > /home/circleci/repo/.npmrc
- run: npm whoami
- run: npx nx deploy YOUR_PACKAGE
You can check the steps suggested in the CircleCI's guide
đĻ Options <a name="options"></a>
install
--dist-folder-path
<a name="--dist-folder-path-install"></a>
- required
- Example:
nx generate ngx-deploy-npm:install --project=lib-1 --dist-folder-path="dist/libs/lib-1"
Indicates the dist folder path. The path where is located the bundle of your library. The path should be relative to the project's root.
--project
- required
- Example:
nx generate ngx-deploy-npm:install --project=lib-1 --dist-folder-path="dist/libs/lib-1"
âlib-1
will be configured. It will create the target deploy with the default options on the projectlib-1
.
Specify which library should be configured.
--access
<a name="--access-install"></a>
- optional
- Default:
public
- Example:
nx generate ngx-deploy-npm:install --access=restricted --project=lib-1 --dist-folder-path="dist/libs/lib-1"
Tells the registry whether to publish the package as public or restricted. It only applies to scoped packages, which default to restricted. If you don't have a paid account, you must publish with --access public to publish scoped packages.
deploy
--dist-folder-path
- required
- Example:
nx deploy --dist-folder-path='dist/libs/my-project'
Indicate the dist folder path. The path must relative to project's root.
--package-version
- optional
- Example:
nx deploy --package-version 2.3.4
It's going to put that version on your package.json
and publish the library with that version on NPM.
--tag
- optional
- Default:
latest
(string) - Example:
nx deploy --tag alpha
â Your package will be available for download using that tag,npm install your-package@alpha
useful for RC versions, alpha, betas.
Registers the published package with the given tag, such that npm install @
will install this version. By default, npm publish
updates and npm install
installs the latest
tag. See npm-dist-tag
for details about tags.
--access
- Default:
public
(string) - Example:
nx deploy --access public
Tells the registry whether to publish the package as public or restricted. It only applies to scoped packages, which default to restricted. If you don't have a paid account, you must publish with --access public to publish scoped packages.
--otp
- optional
- Example:
nx deploy --otp TOKEN
If you have two-factor authentication enabled in auth-and-writes mode, you can provide a code from your authenticator.
--registry
- optional
- Example:
nx deploy --registry http://localhost:4873
Configure npm to use any compatible registry you like, and even run your own registry.
--dry-run
- optional
- Default:
false
(boolean) - Example:
nx deploy --dry-run
For testing: Run through without making any changes. Execute with --dry-run
, and nothing will happen. It will show a list of the options used on the console.
Compatibility overview with Nx
Version | Nx Workspace Version |
---|---|
v8.3.0 | ^20.0.0 || ^19.0.0 || ^18.0.0 || ^17.0.0 || ^16.0.0 |
v8.2.0 | ^19.0.0 || ^18.0.0 || ^17.0.0 || ^16.0.0 |
v8.1.0 | ^18.0.0 || ^17.0.0 || ^16.0.0 |
v8.0.0 | ^17.0.0 || ^16.0.0 |
v7.1.0 | ^17.0.0 || ^16.0.0 |
v7.0.1 | ^16.0.0 |
đ Configuration File <a name="configuration-file"></a>
To avoid all these command-line cmd options, you can write down your
configuration in the workspace.json
file in the options
attribute
of your deploy project's executor.
Just change the option to lower camel case.
A list of all available options is also available here.
Example:
nx deploy your-library --tag alpha --access public --dry-run
becomes
"deploy": {
"executor": "ngx-deploy-npm:deploy",
"options": {
"tag": "alpha",
"access": "public",
"dryRun": true
}
}
Now you can just run nx deploy YOUR-LIBRARY
without all the options in the command line! đ
âšī¸ You can always use the --dry-run option to verify if your configuration is correct.
đ§ Essential considerations <a name="essential-considerations"></a>
Version Generation
This deployer doesn't bump or generate a new package version; here, we care about doing one thing well, publish your libs to NPM. You can change the version package at publishment using the --package-version
option.
We strongly recommend using @jscutlery/semver
to generate your package's version based on your commits automatically. When a new version is generated you can specify to publish it using ngx-deploy-npm
.
For more information go to semver's documentation
We use @jscutlery/semver
here on ngx-deploy-npm
to generate the package's next version, and we use ngx-deploy-npm
to publish that version to NPM. Yes, it uses itself, take a look by yourself ngx-deploy-npm/project.json
Only publishable libraries are being configured <!-- omit in toc -->
Only publishable libraries are going to be configured.
đ Do you Want to Contribute? <a name="do-you-want-to-contribute"></a>
We create a unique document for you to give you through this path.
License
Code released under the MIT license.
Recognitions
- đ Initially Powered By ngx-deploy-starter