Injular
Inject angular templates, controllers, directives and components with Browsersync
AngularJS 1.x hot reloading. This is a plugin for the awesome BrowserSync.
Install
$ npm install --save-dev bs-injular injular@legacy browser-sync
Try it
You can try a live demo of the client code by clicking here.
If you want to try it with the server code, run the following commands:
git clone https://github.com/tfoxy/bs-injular-demo.gitcd bs-injular-demonpm install && bower installgulp serve
Modify the *.html
, *.controller.js
and *.directive.js
files inside src/app
and watch the changes instantly.
Click here to watch GIF of demo
Setup
Minimal
var browserSync = ;var bsInjular = ; browserSync; ;
This will inject all html files inside an app
folder.
Recommended
var browserSync = ;var bsInjular = ; browserSync; ;
This supports template, controller, directive, component and filter injection.
Configuration
If you want to inject controllers, you must provide the following properties:
controllers: '**/app/**/*.controller.js' moduleFile: '**/app/index.module.js'
The module file is necessary to get the $controllerProvider
in the config phase so that the controllers can be injected later.
If you want to inject directives and components, you must provide the following properties:
directives: '**/app/**/*.+(directive|component).js' angularFile: '/bower_components/angular/angular.js' moduleFile: '**/app/index.module.js'
The module file is necessary to get the $compileProvider
in the config phase so that the directives can be injected later.
The angular file is necessary to keep track of the directives present in a file.
WARNING: The controller files must retrieve the module using angular.module()
and only use the controller
recipe. The same applies to directives.
angular ; { // Controller code here}
If there is any other angular recipe, it will be ignored.
Also, when using the BrowserSync API, you must only reload the changed script file:
browserSync
When browserSync.stream
is used with multiple source files, it will reload the page.
If you use
generator-gulp-angular,
you must change the watches behaviour so that only the changed script is reloaded.
See:
scripts.js
watch.js
Version support
Supports AngularJS from 1.2 to 1.5 . Supports all modern browsers and IE >= 8. NOTE: for IE8, you must set supportIE8 option to true:
browserSync;
Help
If you have some problems with the configuration,
you can get more information by setting the log level of Browsersync to debug
:
;
If you get the following messages when changing a file:
[BS] [Injular] No moduleFile was matched: **/app/index.module.js[BS] [Injular] No angularFile was matched: /bower_components/angular/angular.js
you can check if those patterns match any of the requests made to the server.
If you need more help, you can submit an issue or leave a message in gitter.
What's missing
-
Support for javascript bundlers: webpack, browserify, rollup.js
Template injection works. Scripts changes reload the browser. -
Injection of
service
andfactory
recipes. -
Show the file and line number when an error is thrown in an injected script.
Currently, the script is evaluated usingFunction
.
Resources
Inspired by shakyShane/html-injector and pashaigood/browser-sync-angular-template