NPM¶
The node package manager npm
is a widely used tool to manage JavaScript dependencies. In
order to make the project setup easier for everybody, we recommend to follow the convention
of typical scripts like build
, watch
and test
in the package.json
file.
You can find more info about this convention on blog posts like this https://www.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/.
npm build¶
Once npm install
(npm i
for short) has been run to install all dependencies specified
on package.json
, one typically has to build the project. Building can happen with tools like
Webpack, Grunt or similar. To unify the build command across Nextcoud apps, just add the build
command(s) as build
script to your.
For apps that use webpack, this might look like this:
{
"name": "myapp",
"scripts": {
"build": "NODE_ENV=production webpack --progress --hide-modules --config webpack.prod.js"
},
"devDependencies": {
"webpack": "^4.26.1",
"webpack-cli": "^3.1.2",
}
}
You can then run npm build
in your app’s root directory to invoke the build process.
See the npm-build docs for more info.
npm run dev, npm run watch¶
Since building the release version of JavaScript scripts can be slow, apps often have a dedicated build step for development that builds faster and enables debug output. Additionally, it can instructs the bundler to listen to file changes and (incrementally) rebuild the project.
This command should be added to package.json
as dev
and watch
script:
{
"name": "myapp",
"scripts": {
"build": "NODE_ENV=production webpack --progress --hide-modules --config webpack.prod.js",
"dev": "NODE_ENV=development webpack --progress --config webpack.dev.js",
"watch": "NODE_ENV=development webpack --progress --watch --config webpack.dev.js"
},
"devDependencies": {
"webpack": "^4.26.1",
"webpack-cli": "^3.1.2",
}
}
The development build is invoked with npm run dev
or if you want to leave the process running and update on every change made to the source files, npm run watch
.
npm test¶
Npm will run the test
script when npm test
is run, hence you might want to specify the
test command(s) like this:
{
"scripts": {
"test": "mocha-webpack --webpack-config webpack.test.js --require src/tests/setup.js \"src/tests/**/*.spec.js\""
}
}
More info about this command can be found in the npm-test documentation.
npm run lint (optional)¶
Nextcloud apps that use linting tools for consistent code formatting typically add a lint
script to their
package.json
:
{
"scripts": {
"lint": "eslint --ext .js,.vue src"
}
}
If style linting is a separate script, stylelint
shall be used as conventional script name:
{
"scripts": {
"stylelint": "stylelint src"
}
}