UNPKG

gulp-force-developer

Version:

A gulp library for salesforce and force.com development

232 lines (174 loc) 6.98 kB
# gulp-force-developer > A gulp library for salesforce and force.com development. Designed to help force.com developers to work using the benefits of gulp and a folder structure when developing. See: (https://github.com/jkentjnr/sfdc-gulp-travisci-boilerplate) for a boilplate solution. ```shell npm install gulp-force-developer --save-dev ``` Once the plugin has been installed, it may be enabled inside your Gulpfile with this line of JavaScript: ```js var gulp = require('gulp'), gutil = require('gulp-util'); forceDeveloper = require('./gulp-force-developer').registerForGulp(gulp, gutil); ``` ### Overview Using gulp and the `gulp-force-developer` tasks, developers for salesforce & force.com can: * Manage their projects / packages in any folder structure they like. * Integrate the full suite of gulp tasks into their deployment process. * Ensure only new & modified code is published as part of each deployment / build. This enables a developer to code using any IDE, pushing changes via gulp. To use `gulp-force-developer` as quickly as possible, we recommend starting with the `gulpfile.js` in examples. ### Folder Structures #### Traditional Folder Structure Traditionally, when a developer is developing for salesforce / force.com, they are constrained by the mandated package structure. This structure is extremely limiting and, as the size of projects / packages grow, raplidly becomes unwieldy. ``` package.xml == classes -- PaymentController.cls -- PaymentController.cls-meta.xml -- UserManagement.cls -- UserManagement.cls-meta.xml == pages -- Payment.page -- Payment.page-meta.xml -- UserManagement.page -- UserManagement.page-meta.xml == objects -- Payment__c.object ``` #### gulp-force-developer Folder Structure Using `gulp-force-developer`, a developer can adopt a fully dynamic file structure that operates independent of the prescribed salesforce package structure. The below example is a snippet from a developer managing their package in structure with little constraints, appropriate for their project. ``` == .metadata -- Payment.page-meta.xml -- PaymentController.cls-meta.xml -- UserManagement.page-meta.xml -- UserManagementController.cls-meta.xml == Admin == Users -- UserManagementController.cls -- UserManagement.page == Payments -- PaymentController.cls -- Payment.page -- Payment__c.object ``` ### Gulp Tasks To register the gulp tasks, you must use: ```js require('gulp-force-developer').registerForGulp(gulp, gutil); ``` #### force-package-config Loads the options from the package.json #### force-reset Deletes the file used to track changes between `force-commit` calls #### force-package Packages files that have changed since the previous `force-commit` call #### force-package-all Packages all files #### force-zip Generates the output from the `force-package` and `force-package-all` calls as a zip, ready for deployment #### force-commit Updates the track changes file to refect the current state #### force-mock-resources Mocks resources from the package.json file. This is required when completing checkOnly tests that have Visualforce pages bound to resources. ### Usage To change your configuration, you may alter your project's package.json file. ```js { "name": "salesforce project", "version": "1.0.0", "description": "", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "MIT", "forceDeveloperConfig": { "projectBaseDirectory": "src" } } ``` Or you may modify the options from within your gulpfile. ```js var gulp = require('gulp'), gutil = require('gulp-util'), forceDeveloper = require('gulp-force-developer').registerForGulp(gulp, gutil); forceDeveloper.options.projectBaseDirectory = 'src'; ``` In your project's gulpfile, register the tasks with gulp and extend as appropriate. ```js var salesforcePackageFile = './.package/package.zip', username = 'testuser@force.com', password ='password', token = 'Qr1ScFquCn1uT0YO6ywUj5je'; // ---------------------------------------------------------------- var gulp = require('gulp'), gutil = require('gulp-util'), forceDeploy = require('gulp-jsforce-deploy'); forceDeveloper = require('gulp-force-developer').registerForGulp(gulp, gutil); // ---------------------------------------------------------------- // REGISTER GULP TASKS gulp.task('deploy', function(done) { return gulp.src(salesforcePackageFile) .pipe(forceDeploy({ username: username, password: password + token, pollInterval: 5*1000 //, loginUrl: 'https://test.salesforce.com' //, pollTimeout: 120*1000 //, version: '33.0' })); }); gulp.task('default', gulp.series( 'force-package-config', 'force-package', 'force-zip', 'deploy', 'force-commit' )); ``` ### Options #### options.fileChangeHashFile Type: `String` Default value: `'.force-developer.filehash.json'` Persists the file hashes to determine modified and new files. #### options.forcePackageContinueSilent Type: `Boolean` Default value: `false` By default `force-package` ends the gulp sequence with an error when no new or modified code is available for deployment. When `forcePackageContinueSilent` is `true` it causes `force-package` to continue with the subsequent gulp tasks. This behavior modification can be useful in complex deployment scenarios where multiple projects are merged together into one deployment. #### options.metadataSourceDirectory Type: `String` Default value: `'app-metadata'` The folder used to store all `'-meta.xml'` files for the project. A corresponding file is required for all pages, components, trigger and classes. If the `projectBaseDirectory` isn't altered, the default location is `./project/app-metadata`. #### options.projectBaseDirectory Type: `String` Default value: `'project'` Used to determine the root of the project folder. #### options.outputDirectory Type: `String` Default value: `'.package'` The folder used when the files are copied from the project folder into a salesforce package-compliant folder structure. #### options.outputPackageZip Type: `String` Default value: `'./.package/package.zip'` The location where the zipped package is to be stored. #### options.apiVersion Type: `Integer` Default value: `34` The api version to be used by the library. Used when creating on-demand meta-xml files. #### options.mockResources Type: `Array (String)` Default value: `[]` A list of resource names required to be mocked so a test deployment can be completed successfully. ## Contributing All contributions welcome! ## Release History * 0.1.16 * Added Lightning / Aura definition bundle support * 0.1.15 * Added support for modifying options from gulpfile * 0.1.10 * Added resource mocking support * 0.1.3 * Documentation updates. * 0.1.0 * Inital release.