I'm developing an app that works with angular 1.5.8, this app runs like charm on chrome but in Firefox the app doesn't respond as well. I'm looking for any hints of why this behavior is happening. In the Firefox console i received this log (just a part of it) :
Error: Assertion failed
assert@http://ift.tt/2bGirIR
assertIsNodeWrapper@http://ift.tt/2bGj93S
I'm thinking it could be the gruntfile configuration or the bower.json file. You can check out this two files below.
Gruntfile
// Generated on 2015-10-22 using generator-angular 0.12.1
'use strict';
// # Globbing
// for performance reasons we're only matching one level down:
// 'test/spec/{,*/}*.js'
// use this if you want to recursively match all subfolders:
// 'test/spec/**/*.js'
module.exports = function(grunt) {
// Time how long tasks take. Can help when optimizing build times
require('time-grunt')(grunt);
// Automatically load required Grunt tasks
require('jit-grunt')(grunt, {
useminPrepare : 'grunt-usemin',
ngtemplates : 'grunt-angular-templates',
cdnify : 'grunt-google-cdn'
});
// Configurable paths for the application
var appConfig = {
app : require('./bower.json').appPath || 'app',
dist : 'dist'
};
// Grunt WAR --- Add this line
grunt.loadNpmTasks('grunt-war');
// Define the configuration for all the tasks
grunt
.initConfig({
// Project settings
yeoman : appConfig,
// Watches files for changes and runs tasks based on the changed
// files
watch : {
bower : {
files : [ 'bower.json' ],
tasks : [ 'wiredep' ]
},
js : {
files : [ '<%= yeoman.app %>/scripts/{,*/}*.js' ],
tasks : [ 'newer:jshint:all' ],
options : {
livereload : '<%= connect.options.livereload %>'
}
},
jsTest : {
files : [ 'test/spec/{,*/}*.js' ],
tasks : [ 'newer:jshint:test', 'karma' ]
},
styles : {
files : [ '<%= yeoman.app %>/styles/{,*/}*.css' ],
tasks : [ 'newer:copy:styles', 'autoprefixer' ]
},
gruntfile : {
files : [ 'Gruntfile.js' ]
},
livereload : {
options : {
livereload : '<%= connect.options.livereload %>'
},
files : [
'<%= yeoman.app %>/{,*/}*.html',
'.tmp/styles/{,*/}*.css',
'<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
'<%= yeoman.app %>/resources/{,*/}*.json' ]
}
},
// The actual grunt server settings
connect : {
options : {
port : 9000,
// Change this to '0.0.0.0' to access the server from
// outside.
hostname : 'dev.telintel.net',
livereload : 35729
},
livereload : {
options : {
open : true,
middleware : function(connect) {
return [
connect.static('.tmp'),
connect()
.use(
'/bower_components',
connect
.static('./bower_components')),
connect().use('/app/styles',
connect.static('./app/styles')),
connect.static(appConfig.app) ];
}
}
},
test : {
options : {
port : 9001,
middleware : function(connect) {
return [
connect.static('.tmp'),
connect.static('test'),
connect()
.use(
'/bower_components',
connect
.static('./bower_components')),
connect.static(appConfig.app) ];
}
}
},
dist : {
options : {
open : true,
base : '<%= yeoman.dist %>'
}
}
},
// Make sure code styles are up to par and there are no obvious
// mistakes
jshint : {
options : {
jshintrc : '.jshintrc',
reporter : require('jshint-stylish')
},
all : {
src : [ 'Gruntfile.js',
'<%= yeoman.app %>/scripts/{,*/}*.js' ]
},
test : {
options : {
jshintrc : 'test/.jshintrc'
},
src : [ 'test/spec/{,*/}*.js' ]
}
},
// Empties folders to start fresh
clean : {
dist : {
files : [ {
dot : true,
src : [ '.tmp', '<%= yeoman.dist %>/{,*/}*',
'!<%= yeoman.dist %>/.git{,*/}*' ]
} ]
},
server : '.tmp'
},
// Add vendor prefixed styles
autoprefixer : {
options : {
browsers : [ 'last 1 version' ]
},
server : {
options : {
map : true,
},
files : [ {
expand : true,
cwd : '.tmp/styles/',
src : '{,*/}*.css',
dest : '.tmp/styles/'
} ]
},
dist : {
files : [ {
expand : true,
cwd : '.tmp/styles/',
src : '{,*/}*.css',
dest : '.tmp/styles/'
} ]
}
},
// Automatically inject Bower components into the app
wiredep : {
app : {
src : [ '<%= yeoman.app %>/index.html' ],
ignorePath : /\.\.\//
},
test : {
devDependencies : true,
src : '<%= karma.unit.configFile %>',
ignorePath : /\.\.\//,
fileTypes : {
js : {
block : /(([\s\t]*)\/{2}\s*?bower:\s*?(\S*))(\n|\r|.)*?(\/{2}\s*endbower)/gi,
detect : {
js : /'(.*\.js)'/gi
},
replace : {
js : '\'\','
}
}
}
}
},
// Renames files for browser caching purposes
filerev : {
dist : {
src : [
'<%= yeoman.dist %>/scripts/{,*/}*.js',
'<%= yeoman.dist %>/styles/{,*/}*.css',
'<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
'<%= yeoman.dist %>/styles/fonts/*' ]
}
},
// Reads HTML for usemin blocks to enable smart builds that
// automatically
// concat, minify and revision files. Creates configurations in
// memory so
// additional tasks can operate on them
useminPrepare : {
html : '<%= yeoman.app %>/index.html',
options : {
dest : '<%= yeoman.dist %>',
flow : {
html : {
steps : {
js : [ 'concat', 'uglifyjs' ],
css : [ 'cssmin' ]
},
post : {}
}
}
}
},
// Performs rewrites based on filerev and the useminPrepare
// configuration
usemin : {
html : [ '<%= yeoman.dist %>/{,*/}*.html' ],
css : [ '<%= yeoman.dist %>/styles/{,*/}*.css' ],
js : [ '<%= yeoman.dist %>/scripts/{,*/}*.js' ],
options : {
assetsDirs : [ '<%= yeoman.dist %>',
'<%= yeoman.dist %>/images',
'<%= yeoman.dist %>/styles' ],
patterns : {
js : [ [
/(images\/[^''""]*\.(png|jpg|jpeg|gif|webp|svg))/g,
'Replacing references to images' ] ]
}
}
},
// The following *-min tasks will produce minified files in the
// dist folder
// By default, your `index.html`'s <!-- Usemin block --> will
// take care of
// minification. These next options are pre-configured if you do
// not wish
// to use the Usemin blocks.
// cssmin: {
// dist: {
// files: {
// '<%= yeoman.dist %>/styles/main.css': [
// '.tmp/styles/{,*/}*.css'
// ]
// }
// }
// },
// uglify: {
// dist: {
// files: {
// '<%= yeoman.dist %>/scripts/scripts.js': [
// '<%= yeoman.dist %>/scripts/scripts.js'
// ]
// }
// }
// },
// concat: {
// dist: {}
// },
uglify: {
options: {
compress: {
unused: true
},
beautify:true,
mangle: false,
squeeze: false,
ast:true
}
},
imagemin : {
dist : {
files : [ {
expand : true,
cwd : '<%= yeoman.app %>/images',
src : '{,*/}*.{png,jpg,jpeg,gif}',
dest : '<%= yeoman.dist %>/images'
} ]
}
},
svgmin : {
dist : {
files : [ {
expand : true,
cwd : '<%= yeoman.app %>/images',
src : '{,*/}*.svg',
dest : '<%= yeoman.dist %>/images'
} ]
}
},
htmlmin : {
dist : {
options : {
collapseWhitespace : true,
conservativeCollapse : true,
collapseBooleanAttributes : true,
removeCommentsFromCDATA : true
},
files : [ {
expand : true,
cwd : '<%= yeoman.dist %>',
src : [ '*.html' ],
dest : '<%= yeoman.dist %>'
} ]
}
},
ngtemplates : {
dist : {
options : {
module : 'telintelAngularApp',
htmlmin : '<%= htmlmin.dist.options %>',
usemin : 'scripts/scripts.js'
},
cwd : '<%= yeoman.app %>',
src : 'views/{,*/}*.html',
dest : '.tmp/templateCache.js'
}
},
// ng-annotate tries to make the code safe for minification
// automatically
// by using the Angular long form for dependency injection.
ngAnnotate : {
dist : {
files : [ {
expand : true,
cwd : '.tmp/concat/scripts',
src : '*.js',
dest : '.tmp/concat/scripts'
} ]
}
},
// Replace Google CDN references
cdnify : {
dist : {
html : [ '<%= yeoman.dist %>/*.html' ]
}
},
// Copies remaining files to places other tasks can use
copy : {
dist : {
files : [
{
expand : true,
dot : true,
cwd : '<%= yeoman.app %>',
dest : '<%= yeoman.dist %>',
src : [ '*.{ico,png,txt}', '.htaccess',
'*.html', 'images/{,*/}*.{webp}',
'styles/fonts/{,*/}*.*',
'resources/{,*/}*.*','**' ]
},
{
expand : true,
cwd : '.tmp/images',
dest : '<%= yeoman.dist %>/images',
src : [ 'generated/*' ]
},
{
expand : true,
cwd : 'bower_components/bootstrap/dist',
src : 'fonts/*',
dest : '<%= yeoman.dist %>'
},
{
// for font-awesome
expand : true,
cwd : 'bower_components/font-awesome',
src : 'fonts/*',
dest : '<%= yeoman.dist %>'
},
{
expand : true,
cwd : 'bower_components/angular-i18n/',
src : '*.js',
dest : '<%= yeoman.dist %>/bower_components/angular-i18n'
} ]
},
styles : {
expand : true,
cwd : '<%= yeoman.app %>/styles',
dest : '.tmp/styles/',
src : '{,*/}*.css'
}
},
// Run some tasks in parallel to speed up the build process
concurrent : {
server : [ 'copy:styles' ],
test : [ 'copy:styles' ],
dist : [ 'copy:styles', 'svgmin' ]
},
// Test settings
karma : {
unit : {
configFile : 'test/karma.conf.js',
singleRun : true
}
},
war : {
target : {
options : {
war_dist_folder : '<%= yeoman.dist %>', // Where you
// have your
// yeoman
// build
// files
war_verbose : true,
war_name : 'telintel', // the name of your war
webxml_welcome : 'index.html',
webxml_display_name : 'Telintel',
webxml_mime_mapping : [ // some settings that you
// want to appear in your
// web.xml file
]
},
files : [ {
expand : true,
cwd : '<%= yeoman.dist %>', // Where you have your
// yeoman build files
src : [ '**' ],
dest : '.'
} ]
}
}
});
grunt.registerTask('serve', 'Compile then start a connect web server',
function(target) {
if (target === 'dist') {
return grunt.task
.run([ 'build', 'connect:dist:keepalive' ]);
}
grunt.task.run([ 'clean:server', 'wiredep',
'concurrent:server', 'autoprefixer:server',
'connect:livereload', 'watch' ]);
});
grunt
.registerTask(
'server',
'DEPRECATED TASK. Use the "serve" task instead',
function(target) {
grunt.log
.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
grunt.task.run([ 'serve:' + target ]);
});
grunt.registerTask('test', [ 'clean:server', 'wiredep', 'concurrent:test',
'autoprefixer', 'connect:test', 'karma' ]);
grunt.registerTask('build', [ 'clean:dist', 'wiredep', 'useminPrepare',
'concurrent:dist', 'autoprefixer', 'ngtemplates', 'concat',
'ngAnnotate', 'copy:dist', 'cdnify', 'cssmin', 'uglify', 'filerev',
'usemin', 'htmlmin' ]);
grunt.registerTask('default', [ 'newer:jshint', 'test', 'build' ]);
};
Bower json file
{
"name": "telintel-angular",
"version": "0.0.0",
"dependencies": {
"jquery": "2.2.4",
"angular": "~1.3.0",
"bootstrap": "3.3.6",
"angular-animate": "^1.3.0",
"angular-aria": "^1.3.0",
"angular-cookies": "^1.3.0",
"angular-messages": "^1.3.0",
"angular-resource": "^1.3.0",
"angular-route": "^1.3.0",
"angular-sanitize": "^1.3.0",
"angular-touch": "^1.3.0",
"DataTables": "^1.10.9",
"font-awesome": "fontawesome#~4.4.0",
"tooltipster": "~3.3.0",
"bootstrap-validator": "~0.9.0",
"validator-js": "~4.2.0",
"google-recaptcha": "~1.0.0",
"angular-translate": "~2.8.1",
"angular-translate-loader-static-files": "~2.8.1",
"angular-translate-storage-local": "~2.8.1",
"angular-translate-handler-log": "~2.8.1",
"angular-dynamic-locale": "~0.1.27",
"angular-i18n": "~1.4.7",
"components-font-awesome": "~4.4.0",
"highcharts-ng": "~0.0.11",
"highcharts": "~4.1.9",
"ng-bs-daterangepicker": "~0.0.5",
"AngularJS-Toaster": "2.0.0",
"angular-bootstrap": "~0.14.3",
"angular-datatables": "~0.5.1",
"isteven-angular-multiselect": "angular-multi-select#^4.0.0",
"angular-moment": "~0.10.3",
"moment": "~2.11.2",
"ng-tags-input": "~3.0.0",
"jszip": "~2.5.0",
"js-xlsx": "~0.8.0"
},
"devDependencies": {
"angular-mocks": "^1.3.0"
},
"appPath": "app",
"moduleName": "telintelAngularApp",
"overrides": {
"bootstrap": {
"main": [
"less/bootstrap.less",
"dist/css/bootstrap.css",
"dist/js/bootstrap.js"
]
}
},
"resolutions": {
"angular": "1.5.8",
"bootstrap": "3.3.6",
"moment": "~2.8.0"
},
"packages": {
"crypto-base": {},
"crypto-sha1": {}
}
}
Any ideas, insights or advice would be greatly appreciated. :)
Thank you all.
Aucun commentaire:
Enregistrer un commentaire