Giter VIP home page Giter VIP logo

gulp-ui5-preload's Introduction

NOTE: This project is looking for Maintainers. See this Issue

gulp-ui5-preload Build Status npm version

Creates a Component-preload.js or library-preload.json file for openui5 / sapui5 projects. Creating a preload file can speed up the initial load time of your webapp, by reducing the number of HTTP requests / roundtrips to load your code. The preload file can combine your js artifacts, xml, html and json views as well as .properties files into a single Component-preload.js / library-preload.json file.

Install

$ npm install --save-dev gulp-ui5-preload

Usage

Simple example.

var ui5preload = require('gulp-ui5-preload');

gulp.task('ui5preload', function(){
  return gulp.src([
					'src/ui/**/**.+(js|xml)',
					'!src/ui/thirdparty/**' //exclude files that don't belong in preload (optional)
                  ])
          .pipe(ui5preload({base:'src/ui',namespace:'my.project.ui'}))
          .pipe(gulp.dest('dist'));
     })

Example with uglify / minify js and xml.

// npm install --save-dev gulp-ui5-preload gulp-uglify gulp-pretty-data gulp-if
var ui5preload = require('gulp-ui5-preload');
var uglify = require('gulp-uglify');
var prettydata = require('gulp-pretty-data');
var gulpif = require('gulp-if');

gulp.task('ui5preload', function(){
  return gulp.src([
					'src/ui/**/**.+(js|xml)',
					'!src/ui/thirdparty/**'
                  ])
          .pipe(gulpif('**/*.js',uglify()))    //only pass .js files to uglify
          .pipe(gulpif('**/*.xml',prettydata({type:'minify'}))) // only pass .xml to prettydata 
          .pipe(ui5preload({base:'src/ui',namespace:'my.project.ui'}))
          .pipe(gulp.dest('dist'));
     })

API

ui5Preload(options) -> vinyl through-stream

Accepts an options object. Returns a vinyl through-stream which collects all .xml and .js files and emits a single vinyl file (Component-preload.js / library-preload.json) which is passed downstream.

options

base
  • required
  • Type: string

The base / entry path of your app. Usually the same location where your index.html and the Component.js resides. Can also be just './' to point to the root of your project.

namespace
  • Type: string
  • Default: ''
  • Example: my.company.app

The namespace at the base path. All source files are treated as sub-namespaces of this namespace, relative to the base path.

fileName
  • Type: string
  • Default: 'Component-preload.js' or 'library-preload.json' (depends on isLibrary option)

File name of the combined file to emit.

isLibrary
  • Type: boolean
  • Default: false

If set to true a library-preload.json file is emitted instead of a Component-preload.js file (default). The emitted file contents between those options vary a little bit.

License

Apache 2.0 © Christian Theilemann

gulp-ui5-preload's People

Contributors

bendkt avatar cschuff avatar geekflyer avatar jomaguma avatar themasch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

gulp-ui5-preload's Issues

Looking for Maintainers

Hi,

I'm not working anymore with UI5 and hence would looking for someone to take over maintenance and ownership of this repo.

Please comment below if you are interested.

String '$&' messed up by gulp-ui5-preload

Hi,

first of all: thanks for this great tool. I'm using it a lot.

I discovered a little and quite tricky quirk. For a library-preload.json gulp-ui5-preload minifies
"\\$&" to \"\\\\JSON_CONTENT\"

I tracked this down to index.js:79
var contents = template.replace('JSON_CONTENT', jsonContent);

Problem is this:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter

Pull Request with fix will follow.

BR
Chris

create library-preload.json for libraries

Are there plans to support libraries and preload files for these?
The differences in both files are really small, basically its the name (library-preload.json instead of Component-preload.js) and the "jQuery.sap.registerPreloadedModules( )" wrapping is left out (since its a json file).

You could just add another option "isLibrary" that triggers this (for example).

File timestamp of generated preload file is wrong

Since the target preload file is created with

var preloadFile = firstFile.clone({contents: false});

all file attributes including creation and modification timestamps are cloned from the firstFile which is the first file coming out of the stream.

This leads to subsequent problems when creating e.g. a sap-ui-cachebuster-info.json file.
When the firstFile has not been changed for a long time the Component-preload.js will be listed in the cachebuster file with the old timestamp of the firstFile which will lead to clients loading the outdated version of Component-preload.js from the browser cache despite a newer version being available on the server.

Since this repo is not maintained anymore I just want to report this for any others who might face this problem in the future.

I will try to find a workaround by manually setting the modification date of Component-preload.js after it has been created in my gulp build script.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.