模块化一个AngularJS应用后,如何在不需要输入大量脚本的情况下将整个项目包含在index.html中?标签
After modularizing an AngularJS app, how do you include the entire project in the index.html without having to type a ton of <script> tags
我学习Angular已经有一段时间了,我正在寻找模块化应用的最佳方法。我认为我的理解是相当顺利,但我已经看了一段时间,似乎不能得到一个很好的答案,所有这些.js文件如何被包含在index.html中,而不只是手动输入一堆标签。我一直在研究Grunt/Gulp,并得到如何将整个应用程序合并到一个。js文件中,但对于开发,我猜你不想每次要更新应用程序时都重新运行Grunt或Gulp。
有许多不同的选项:gulp, grunt或webpack似乎是最受欢迎的。这些天我最喜欢用webpack。
一个好的设置通常会运行一个本地节点服务器,它会在每次更改文件时自动刷新浏览器。
有很多自动生成器可以帮你设置这些,或者你也可以在github上找到简单的例子。
基本思路是
- 连接你所有的js文件(按照适当的顺序,模块定义在控制器/服务之前)
- 将其最小化用于生产
- 复制到固定路径
- 在html 中包含这个js文件
- 在开发过程中,让你的grunt/gulp脚本监视js文件中的变化,并重新运行上述步骤,这样你就不必手动运行grunt/gulp任务。
现在,如果你正在使用gulp,这里是你通常如何处理以上步骤
gulp.task('process-js', function () {
return gulp.src(jsFiles, {base: './'})
.pipe(gulpif(isProd, concat('all.min.js'), concat('all.js')))
.pipe(gulpif(isProd, uglify({mangle: true, preserveComments: 'some'})))
.pipe(gulp.dest(deployFolder + '/static/js'))
});
其中jsFiles是包含angular应用js文件的文件/文件夹数组
var jsFiles = [
'!static/js/**/*.js',
'!static/js/plugin/**/*.*',
'app/index/**/*module.js',
'app/index/**/*config.js',
'app/index/**/*ctrl.js'
];
注意:使用!
前缀将某些文件/文件夹排除在处理之外。
isProd
只是一个标志,表明您是在准备生产还是开发。
在开发期间,我还使用BrowserSync来监视对我的js文件的任何更改,并重新运行gulp任务来准备all.js
。它还可以在浏览器中自动刷新页面。
gulp.task('run', function () {
browserSync({
server: {
baseDir: deployFolder
},
open: true,
browser: ['google chrome'],
files: deployFolder + '/**/*',
watchOptions: {
debounceDelay: 2000
}
});
gulp.watch(jsFiles, ['process-js']);
});
gulp.task('default', function () {
runSequence(
'clean',
'run'
);
});
Gulp/Grunt
to concat
all your angular files
.
创建2个任务
-
dev build task
- concat到一个文件BUT
don't uglify
。
- concat到一个文件BUT
- a
distribution/production task
与dev 1相同,但这个uglify
是concatenated file
。
相关文章:
- 使用php脚本验证访问者的年龄,并在不刷新的情况下根据结果加载iframe
- 我如何让jQuery使用Greasemonkey 0.8脚本(在Firefox 2上),在没有互联网的情况下使用PC
- 在php中不运行java脚本的情况下重定向页面
- 如何在我的情况下创建加载脚本
- 使用javascript:在没有阻止html标记(<b>、<p>等)的情况下,阻止脚本的最佳方法
- 在谷歌应用程序脚本中,如何在满足条件的情况下只发送一次电子邮件
- 是否可以在不使用服务器端脚本或编程的情况下在网页中进行实时视频流
- 可以在不使用exports命令的情况下编写此类型脚本
- Jquery脚本在没有警报的情况下无法工作
- 如何在没有网络工作者的情况下运行多个脚本
- 可以插入<脚本>标记可以在不使用JavaScript中的eval的情况下多次运行
- 在这种特殊情况下,在PHP脚本之间传递值
- 如何在不阻塞脚本的情况下运行脚本
- Node.JS在没有停止Node.JS脚本的情况下再次运行NodeMsql查询
- 谷歌应用程序脚本:如何在不使用getComment()方法的情况下将第二条注释添加到第一条注释中
- Javascript在不更改脚本标记的情况下阻止缓存
- 如何在不添加html脚本标记的情况下使用google-maps-api-v3
- 谷歌应用程序脚本:如何在没有用户交互的情况下调用绑定到处理程序的函数
- 如何在不使用脚本标记的情况下注入javascript
- 是否可以在不重新加载的情况下运行注入的脚本