Development
Contributing
When developing, please:
- Comply with Standard JS. This is checked with superlinter when you create pull requests and commit to natural.
- Comply with
ts-standard
. This is tested when you create pull requests and commit to natural. - Prevent code duplication. Use jscpd to test this. This is tested when you commit to natural.
- Write unit tests for jasmine. Make sure your unit tests pass.
- For compatibility with browsers, do not use the file system
fs
. If you need to read files, use JSON andrequire
. - Write documentation and commit this to the
gh-pages
branch.
The current configuration of the unit tests requires the following environment variable to be set:
export NODE_PATH=.
CD/CD pipeline
The repository uses Github Actions for testing and publishing.
Currently, there three workflows:
- Node CI: tests natural on the four most recent releases of Nodejs. Code coverage is analysed with Istanbul. Results are forwarded to Coveralls. In the README a badge shows the coverage.
- Nodejs package: The natural package is automatically published to NPM when a release is created (tagged).
- Lint Code Base: the repository is linted using the Github super linter which includes
jslint
andjscpd
.
Github workflows can be found at ./.github/workflows
.
Versioning
We apply semantic versioning. Given natural’s version number MAJOR.MINOR.PATCH, increment the:
- MAJOR version when you make incompatible API changes,
- MINOR version when you add functionality in a backwards compatible manner, and
- PATCH version when you make backwards compatible bug fixes.
Using the library in a browser
The package can be used in the browser using Webpack. It is tested using Webpack, Gulp and Jasmine. The test suite is run using the command: npm run test_browser
. The server is at http://localhost:8888. You should uncheck “run tests in random order” in the browser to make it work. There are some tests that are sensitive to the order in which tests are run.
Modularity
Each part of the library has its own index.js
file. You only have to include the module you are actually using. For instance, if you are using one of the tokenizers:
const tokenenizers = require('natural/lib/natural/tokenizers')
const tokenizer = new tokenizers.SentenceTokenizer()