# frontend-maven-plugin **Repository Path**: qwfys/frontend-maven-plugin ## Basic Information - **Project Name**: frontend-maven-plugin - **Description**: "Maven-node-grunt-gulp-npm-node-plugin to end all maven-node-grunt-gulp-npm-plugins." A Maven plugin that downloads/installs Node and NPM locally, runs NPM install, Grunt, Gulp and/or Karma. - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-03-16 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # frontend-maven-plugin [![Build Status OSX and Linux](https://travis-ci.org/eirslett/frontend-maven-plugin.png?branch=master)](https://travis-ci.org/eirslett/frontend-maven-plugin) [![Build status Windows](https://ci.appveyor.com/api/projects/status/vxbccc1t9ceadhi9?svg=true)](https://ci.appveyor.com/project/eirslett/frontend-maven-plugin) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.eirslett/frontend-maven-plugin/badge.svg?style=flat)](https://maven-badges.herokuapp.com/maven-central/com.github.eirslett/frontend-maven-plugin/) This plugin downloads/installs Node and NPM locally for your project, runs `npm install`, and then any combination of [Bower](http://bower.io/), [Grunt](http://gruntjs.com/), [Gulp](http://gulpjs.com/), [Jspm](http://jspm.io), [Karma](http://karma-runner.github.io/), or [Webpack](http://webpack.github.io/). It's supposed to work on Windows, OS X and Linux. If you prefer [Yarn](https://yarnpkg.com/) over [NPM](https://www.npmjs.com/) for your node package fetching, this plugin can also download Node and Yarn and then run `yarn install` for your project. #### What is this plugin meant to do? - Let you keep your frontend and backend builds as separate as possible, by reducing the amount of interaction between them to the bare minimum; using only 1 plugin. - Let you use Node.js and its libraries in your build process without installing Node/NPM globally for your build system - Let you ensure that the version of Node and NPM being run is the same in every build environment #### What is this plugin not meant to do? - Not meant to replace the developer version of Node - frontend developers will still install Node on their laptops, but backend developers can run a clean build without even installing Node on their computer. - Not meant to install Node for production uses. The Node usage is intended as part of a frontend build, running common javascript tasks such as minification, obfuscation, compression, packaging, testing etc. **Notice:** _This plugin does not support already installed Node or npm versions. Use the `exec-maven-plugin` instead._ ## Requirements * _Maven 3_ and _Java 1.8_ * For _Maven 2_ support take a look at the [wiki](https://github.com/eirslett/frontend-maven-plugin/wiki#maven-2). ## Installation Include the plugin as a dependency in your Maven project. Change `LATEST_VERSION` to the latest tagged version. ```xml com.github.eirslett frontend-maven-plugin LATEST_VERSION ... ... ``` ## Usage Have a look at the [example project](frontend-maven-plugin/src/it/example%20project), to see how it should be set up: https://github.com/eirslett/frontend-maven-plugin/blob/master/frontend-maven-plugin/src/it/example%20project/pom.xml - [Installing node and npm](#installing-node-and-npm) - [Installing node and yarn](#installing-node-and-yarn) - Running - [npm](#running-npm) - [yarn](#running-yarn) - [bower](#running-bower) - [grunt](#running-grunt) - [gulp](#running-gulp) - [jspm](#running-jspm) - [karma](#running-karma) - [webpack](#running-webpack) - Configuration - [Working Directory](#working-directory) - [Installation Directory](#installation-directory) - [Proxy Settings](#proxy-settings) - [Environment variables](#environment-variables) - [Ignoring Failure](#ignoring-failure) - [Skipping Execution](#skipping-execution) **Recommendation:** _Try to run all your tasks via npm scripts instead of running bower, grunt, gulp etc. directly._ ### Installing node and npm The versions of Node and npm are downloaded from https://nodejs.org/dist, extracted and put into a `node` folder created in your [installation directory](#installation-directory) . Node/npm will only be "installed" locally to your project. It will not be installed globally on the whole system (and it will not interfere with any Node/npm installations already present). ```xml ... install node and npm install-node-and-npm generate-resources v4.6.0 2.15.9 http://myproxy.example.org/nodejs/ ``` You can also specify separate download roots for npm and node as they are stored in separate repos. ```xml ... http://myproxy.example.org/nodejs/ https://myproxy.example.org/npm/ ``` You can use Nexus repository Manager to proxy npm registries. See https://help.sonatype.com/display/NXRM3/Npm+Registry **Notice:** _Remember to gitignore the `node` folder, unless you actually want to commit it._ ### Installing node and yarn Instead of using Node with npm you can alternatively choose to install Node with Yarn as the package manager. The versions of Node and Yarn are downloaded from `https://nodejs.org/dist` for Node and from the Github releases for Yarn, extracted and put into a `node` folder created in your installation directory. Node/Yarn will only be "installed" locally to your project. It will not be installed globally on the whole system (and it will not interfere with any Node/Yarn installations already present). Have a look at the example `POM` to see how it should be set up with Yarn: https://github.com/eirslett/frontend-maven-plugin/blob/master/frontend-maven-plugin/src/it/yarn-integration/pom.xml ```xml ... install node and yarn install-node-and-yarn generate-resources v6.9.1 v0.16.1 http://myproxy.example.org/nodejs/ http://myproxy.example.org/yarn/ ``` ### Running npm All node packaged modules will be installed in the `node_modules` folder in your [working directory](#working-directory). By default, colors will be shown in the log. ```xml npm install npm generate-resources install ``` **Notice:** _Remember to gitignore the `node_modules` folder, unless you actually want to commit it. Npm packages will always be installed in `node_modules` next to your `package.json`, which is default npm behavior._ ### Running yarn As with npm above, all node packaged modules will be installed in the `node_modules` folder in your [working directory](#working-directory). ```xml yarn install yarn install ``` ### Running bower All bower dependencies will be installed in the `bower_components` folder in your working directory. ```xml bower install bower install ``` **Notice:** _Remember to gitignore the `bower_components` folder, unless you actually want to commit it._ ### Running Grunt It will run Grunt according to the `Gruntfile.js` in your working directory. By default, colors will be shown in the log. ```xml grunt build grunt generate-resources build ``` ### Running gulp Very similar to the Grunt execution. It will run gulp according to the `gulpfile.js` in your working directory. By default, colors will be shown in the log. ```xml gulp build gulp generate-resources build ``` ### Running jspm All jspm dependencies will be installed in the `jspm_packages` folder in your working directory. ```xml jspm install jspm install ``` ### Running Karma ```xml javascript tests karma test src/test/javascript/karma.conf.ci.js ``` **Skipping tests:** If you run maven with the `-DskipTests` flag, karma tests will be skipped. **Ignoring failed tests:** If you want to ignore test failures run maven with the `-Dmaven.test.failure.ignore` flag, karma test results will not stop the build but test results will remain in test output files. Suitable for continuous integration tool builds. **Why karma.conf.ci.js?** When using Karma, you should have two separate configurations: `karma.conf.js` and `karma.conf.ci.js`. (The second one should inherit configuration from the first one, and override some options. The example project shows you how to set it up.) The idea is that you use `karma.conf.js` while developing (using watch/livereload etc.), and `karma.conf.ci.js` when building - for example, when building, it should only run karma once, it should generate xml reports, it should run only in PhantomJS, and/or it should generate code coverage reports. **Running Karma through Grunt or gulp:** You may choose to run Karma [directly through Grunt](https://github.com/karma-runner/grunt-karma) or [through gulp](https://github.com/karma-runner/gulp-karma) instead, as part of the `grunt` or `gulp` execution. That will help to separate your frontend and backend builds even more. ### Running Webpack ```xml webpack build webpack generate-resources -p ``` ### Optional Configuration #### Working directory The working directory is where you've put `package.json` and your frontend configuration files (`Gruntfile.js` or `gulpfile.js` etc). The default working directory is your project's base directory (the same directory as your `pom.xml`). You can change the working directory if you want: ```xml com.github.eirslett frontend-maven-plugin src/main/frontend ``` **Notice:** _Npm packages will always be installed in `node_modules` next to your `package.json`, which is default npm behavior._ #### Installation Directory The installation directory is the folder where your node and npm are installed. You can set this property on the different goals. Or choose to set it for all the goals, in the maven configuration. ```xml com.github.eirslett frontend-maven-plugin target ``` #### Proxy settings If you have [configured proxy settings for Maven](http://maven.apache.org/guides/mini/guide-proxies.html) in your settings.xml file, the plugin will automatically use the proxy for downloading node and npm, as well as [passing the proxy to npm commands](https://docs.npmjs.com/misc/config#proxy). **Non Proxy Hosts:** npm does not currently support non proxy hosts - if you are using a proxy and npm install is not downloading from your repository, it may be because it cannot be accessed through your proxy. If that is the case, you can stop the npm execution from inheriting the Maven proxy settings like this: ```xml false ``` If you have [configured proxy settings for Maven](http://maven.apache.org/guides/mini/guide-proxies.html) in your settings.xml file, the plugin will automatically [pass the proxy to bower commands](https://docs.npmjs.com/misc/config#proxy). If that is the case, you can stop the bower execution from inheriting the Maven proxy settings like this: ```xml false ``` If you want to disable proxy for Yarn you can use `yarnInheritsProxyConfigFromMaven`. When you have proxy settings in your settings.xml file if you don't use this param it will run code below with proxy settings, in some cases you don't want that. Adding this param into the configuration section will solve this issue ```xml tests yarn compile false run test ``` #### Environment variables If you need to pass some variable to Node, you can set that using the property `environmentVariables` in configuration tag of an execution like this: ```xml Snow Lannister ${NODE_ENV} ``` #### Ignoring Failure **Ignoring failed tests:** If you want to ignore test failures in specific execution you can set that using the property `maven.test.failure.ignore` in configuration tag of an execution like this: ```xml true ``` #### Skipping Execution Each frontend build tool and package manager allows skipping execution. This is useful for projects that contain multiple builds (such as a module containing Java and frontend code). **Note** that if the package manager (npm or yarn) is skipped, other build tools will also need to be skipped because they would not have been downloaded. For example, in a project using npm and gulp, if npm is skipped, gulp must also be skipped or the build will fail. Tools and property to enable skipping * npm `-Dskip.npm` * yarn `-Dskip.yarn` * bower `-Dskip.bower` * grunt `-Dskip.grunt` * gulp `-Dskip.gulp` * jspm `-Dskip.jspm` * karma `-Dskip.karma` * webpack `-Dskip.webpack` ## Eclipse M2E support This plugin contains support for M2E, including lifecycle mappings and support for incremental builds in Eclipse. The `install-node-and-npm` goal will only run on a full project build. The other goals support incremental builds to avoid doing unnecessary work. During an incremental build the `npm` goal will only run if the `package.json` file has been changed. The `grunt` and `gulp` goals have new `srcdir` and `triggerfiles` optional configuration options; if these are set they check for changes in your source files before being run. See the wiki for more information. ## Helper scripts During development, it's convenient to have the "npm", "bower", "grunt", "gulp" and "karma" commands available on the command line. If you want that, use [those helper scripts](frontend-maven-plugin/src/it/example%20project/helper-scripts)! ## To build this project: Run `$ mvn clean install` ## Issues, Contributing Please post any issues on the [Github's Issue tracker](https://github.com/eirslett/frontend-maven-plugin/issues). [Pull requests](https://github.com/eirslett/frontend-maven-plugin/pulls) are welcome! You can find a full list of [contributors here](https://github.com/eirslett/frontend-maven-plugin/graphs/contributors). ## License [Apache 2.0](LICENSE)