我的应用程序可以正常使用grunt服务但是当我使用grunt serve:dist测试它时,尝试加载模式,我通过按钮单击它显示' templateUrl'它附加到$ mdDialog.show但从未显示控制器..
这里我提供参考文件,询问我是否还需要其他文件。
Gruntfile.js
// Generated on 2016-10-17 using generator-angular-material-fullstack 0.1.2 'use strict'; module.exports = function (grunt) { var localConfig; try { localConfig = require('./server/config/local.env'); } catch(e) { localConfig = {}; } // Load grunt tasks automatically, when needed require('jit-grunt')(grunt, { express: 'grunt-express-server', useminPrepare: 'grunt-usemin', ngtemplates: 'grunt-angular-templates', cdnify: 'grunt-google-cdn', protractor: 'grunt-protractor-runner', buildcontrol: 'grunt-build-control' }); // Time how long tasks take. Can help when optimizing build times require('time-grunt')(grunt); // Define the configuration for all the tasks grunt.initConfig({ // Project settings pkg: grunt.file.readJSON('package.json'), yeoman: { // configurable paths client: require('./bower.json').appPath || 'client', dist: 'dist' }, express: { options: { port: process.env.PORT || 9000 }, dev: { options: { script: 'server/app.js', debug: true } }, prod: { options: { script: 'dist/server/app.js' } } }, open: { server: { url: 'http://localhost:' } }, watch: { injectJS: { files: [ '/{app,components}/**/*.js', '!/{app,components}/**/*.spec.js', '!/{app,components}/**/*.mock.js', '!/app/app.js'], tasks: ['injector:scripts'] }, injectCss: { files: [ '/{app,components}/**/*.css' ], tasks: ['injector:css'] }, mochaTest: { files: ['server/**/*.spec.js'], tasks: ['env:test', 'mochaTest'] }, jsTest: { files: [ '/{app,components}/**/*.spec.js', '/{app,components}/**/*.mock.js' ], tasks: ['newer:jshint:all', 'karma'] }, injectSass: { files: [ '/{app,components}/**/*.{scss,sass}'], tasks: ['injector:sass'] }, sass: { files: [ '/{app,components}/**/*.{scss,sass}'], tasks: ['sass', 'autoprefixer'] }, gruntfile: { files: ['Gruntfile.js'] }, livereload: { files: [ '{.tmp,}/{app,components}/**/*.css', '{.tmp,}/{app,components}/**/*.html', '{.tmp,}/{app,components}/**/*.js', '!{.tmp,}{app,components}/**/*.spec.js', '!{.tmp,}/{app,components}/**/*.mock.js', '/assets/images/{,*//*}*.{png,jpg,jpeg,gif,webp,svg}', '/assets/icons/{,*//*}*.{png,jpg,jpeg,gif,webp,svg}', '/assets/iconsets/{,*//*}*.{png,jpg,jpeg,gif,webp,svg}' ], options: { livereload: true } }, express: { files: [ 'server/**/*.{js,json}' ], tasks: ['express:dev', 'wait'], options: { livereload: true, nospawn: true //Without this option specified express won't be reloaded } } }, // Make sure code styles are up to par and there are no obvious mistakes jshint: { options: { jshintrc: '/.jshintrc', reporter: require('jshint-stylish') }, server: { options: { jshintrc: 'server/.jshintrc' }, src: [ 'server/**/*.js', '!server/**/*.spec.js' ] }, serverTest: { options: { jshintrc: 'server/.jshintrc-spec' }, src: ['server/**/*.spec.js'] }, all: [ '/{app,components}/**/*.js', '!/{app,components}/**/*.spec.js', '!/{app,components}/**/*.mock.js' ], test: { src: [ '/{app,components}/**/*.spec.js', '/{app,components}/**/*.mock.js' ] } }, // Empties folders to start fresh clean: { dist: { files: [{ dot: true, src: [ '.tmp', '/*', '!/.git*', '!/.openshift', '!/Procfile' ] }] }, server: '.tmp' }, // Add vendor prefixed styles autoprefixer: { options: { browsers: ['last 1 version'] }, dist: { files: [{ expand: true, cwd: '.tmp/', src: '{,*/}*.css', dest: '.tmp/' }] } }, // Debugging with node inspector 'node-inspector': { custom: { options: { 'web-host': 'localhost' } } }, // Use nodemon to run server in debug mode with an initial breakpoint nodemon: { debug: { script: 'server/app.js', options: { nodeArgs: ['--debug-brk'], env: { PORT: process.env.PORT || 9000 }, callback: function (nodemon) { nodemon.on('log', function (event) { console.log(event.colour); }); // opens browser on initial server start nodemon.on('config:update', function () { setTimeout(function () { require('open')('http://localhost:8080/debug?port=5858'); }, 500); }); } } } }, // Automatically inject Bower components into the app wiredep: { target: { src: '/index.html', ignorePath: '/', exclude: ['/json3/', '/es5-shim/'] } }, // Renames files for browser caching purposes rev: { dist: { files: { src: [ '/public/{,*/}*.js', '/public/{,*/}*.css', '/public/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', '/public/assets/icons/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', '/public/assets/iconsets/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', '/public/assets/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: ['/index.html'], options: { dest: '/public' } }, // Performs rewrites based on rev and the useminPrepare configuration usemin: { html: ['/public/{,*/}*.html'], css: ['/public/{,*/}*.css'], js: ['/public/{,*/}*.js'], options: { assetsDirs: [ '/public', '/public/assets/images', '/public/assets/icons', '/public/assets/iconsets' ], // This is so we update image references in our ng-templates patterns: { js: [ [/(assets\/images\/.*?\.(?:gif|jpeg|jpg|png|webp|svg))/gm, 'Update the JS to reference our revved images'], [/(assets\/icons\/.*?\.(?:gif|jpeg|jpg|png|webp|svg))/gm, 'Update the JS to reference our revved icons'], [/(assets\/iconsets\/.*?\.(?:gif|jpeg|jpg|png|webp|svg))/gm, 'Update the JS to reference our revved iconsets'] ] } } }, // The following *-min tasks produce minified files in the dist folder imagemin: { dist: { files: [{ expand: true, cwd: '/assets/images', src: '{,*/}*.{png,jpg,jpeg,gif}', dest: '/public/assets/images' }] } }, svgmin: { dist: { files: [{ expand: true, cwd: '/assets/images', src: '{,*/}*.svg', dest: '/public/assets/images' }] } }, // Allow the use of non-minsafe AngularJS files. Automatically makes it // minsafe compatible so Uglify does not destroy the ng references ngAnnotate: { dist: { files: [{ expand: true, cwd: '.tmp/concat', src: '**/*.js', dest: '.tmp/concat' }] } }, // Package all the html partials into a single javascript payload ngtemplates: { options: { // This should be the name of your apps angular module module: 'testfullstackApp', htmlmin: { collapseBooleanAttributes: true, collapseWhitespace: true, removeAttributeQuotes: true, removeEmptyAttributes: true, removeRedundantAttributes: true, removeScriptTypeAttributes: true, removeStyleLinkTypeAttributes: true }, usemin: 'app/app.js' }, main: { cwd: '', src: ['{app,components}/**/*.html'], dest: '.tmp/templates.js' }, tmp: { cwd: '.tmp', src: ['{app,components}/**/*.html'], dest: '.tmp/tmp-templates.js' } }, // Replace Google CDN references cdnify: { dist: { html: ['/public/*.html'] } }, // Copies remaining files to places other tasks can use copy: { dist: { files: [ { expand: true, dot: true, cwd: '', dest: '/public', src: [ '*.{ico,png,txt}', '.htaccess', 'assets/images/{,*/}*.{webp}', 'assets/fonts/**/*', 'assets/icons/**/*', 'assets/iconsets/**/*', 'index.html' ] }, { expand: true, cwd: '.tmp/images', dest: '/public/assets/images', src: ['generated/*'] },{ expand: true, dot: true, cwd: '/bower_components/components-font-awesome/', src: ['fonts/*.*'], dest: '/public' }, { expand: true, dest: '', src: [ 'package.json', 'server/**/*' ] }] }, styles: { expand: true, cwd: '', dest: '.tmp/', src: ['{app,components}/**/*.css'] } }, buildcontrol: { options: { dir: 'dist', commit: true, push: true, connectCommits: false, message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%' }, heroku: { options: { remote: 'heroku', branch: 'master' } }, openshift: { options: { remote: 'openshift', branch: 'master' } } }, // Run some tasks in parallel to speed up the build process concurrent: { server: [ 'sass' ], test: [ 'sass', ], debug: { tasks: [ 'nodemon', 'node-inspector' ], options: { logConcurrentOutput: true } }, dist: [ 'sass', 'imagemin', 'svgmin' ] }, // Test settings karma: { unit: { configFile: 'karma.conf.js', singleRun: true } }, mochaTest: { options: { reporter: 'spec' }, src: ['server/**/*.spec.js'] }, protractor: { options: { configFile: 'protractor.conf.js' }, chrome: { options: { args: { browser: 'chrome' } } } }, env: { test: { NODE_ENV: 'test' }, prod: { NODE_ENV: 'production' }, all: localConfig }, // Compiles Sass to CSS sass: { server: { options: { loadPath: [ '/bower_components', '/app', '/components' ], compass: false }, files: { '.tmp/app/app.css' : '/app/app.scss' } } }, injector: { options: { }, // Inject application script files into index.html (doesn't include bower) scripts: { options: { transform: function(filePath) { filePath = filePath.replace('/client/', ''); filePath = filePath.replace('/.tmp/', ''); return ''; }, starttag: '', endtag: '' }, files: { '/index.html': [ [ '{.tmp,}/{app,components}/**/*.js', '!{.tmp,}/app/app.js', '!{.tmp,}/{app,components}/**/*.spec.js', '!{.tmp,}/{app,components}/**/*.mock.js' ] ] } }, // Inject component scss into app.scss sass: { options: { transform: function(filePath) { filePath = filePath.replace('/client/app/', ''); filePath = filePath.replace('/client/components/', ''); return '@import \'' + filePath + '\';'; }, starttag: '// injector', endtag: '// endinjector' }, files: { '/app/app.scss': [ '/{app,components}/**/*.{scss,sass}', '!/app/app.{scss,sass}' ] } }, // Inject component css into index.html css: { options: { transform: function(filePath) { filePath = filePath.replace('/client/', ''); filePath = filePath.replace('/.tmp/', ''); return ''; }, starttag: '', endtag: '' }, files: { '/index.html': [ '/{app,components}/**/*.css' ] } } } }); // Used for delaying livereload until after server has restarted grunt.registerTask('wait', function () { grunt.log.ok('Waiting for server reload...'); var done = this.async(); setTimeout(function () { grunt.log.writeln('Done waiting!'); done(); }, 1500); }); grunt.registerTask('express-keepalive', 'Keep grunt running', function() { this.async(); }); grunt.registerTask('serve', function (target) { if (target === 'dist') { return grunt.task.run(['build', 'env:all', 'env:prod', 'express:prod', 'wait', 'open', 'express-keepalive']); } if (target === 'debug') { return grunt.task.run([ 'clean:server', 'env:all', 'injector:sass', 'concurrent:server', 'injector', 'wiredep', 'autoprefixer', 'concurrent:debug' ]); } grunt.task.run([ 'clean:server', 'env:all', 'injector:sass', 'concurrent:server', 'injector', 'wiredep', 'autoprefixer', 'express:dev', 'wait', 'open', 'watch' ]); }); grunt.registerTask('server', function () { grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.'); grunt.task.run(['serve']); }); grunt.registerTask('test', function(target) { if (target === 'server') { return grunt.task.run([ 'env:all', 'env:test', 'mochaTest' ]); } else if (target === 'client') { return grunt.task.run([ 'clean:server', 'env:all', 'injector:sass', 'concurrent:test', 'injector', 'autoprefixer', 'karma' ]); } else if (target === 'e2e') { return grunt.task.run([ 'clean:server', 'env:all', 'env:test', 'injector:sass', 'concurrent:test', 'injector', 'wiredep', 'autoprefixer', 'express:dev', 'protractor' ]); } else grunt.task.run([ 'test:server', 'test:client' ]); }); grunt.registerTask('build', [ 'clean:dist', 'injector:sass', 'concurrent:dist', 'injector', 'wiredep', 'useminPrepare', 'autoprefixer', 'ngtemplates', 'concat', 'ngAnnotate', 'copy:dist', 'cdnify', 'cssmin', 'uglify', 'rev', 'usemin' ]); grunt.registerTask('default', [ 'newer:jshint', 'test', 'build' ]); };
触发模态显示的代码:
$mdDialog.show({ templateUrl: 'app/contacts/contact/contact.html', controller: 'ContactCtrl', controllerAs: 'cont', locals: {user: vm.currentUser, contact: angular.copy(contact)} })
再次与grunt服务一起工作正常。那么grunt serve可能会出现什么问题:dist。代码或grunt配置中的任何问题?
注意:
- 当在grunt serve:dist上打开模态时,它不会在控制台上出现任何错误,但是任何控制台消息都没有打印出来,控制器的功能也没有工作..