如何在构build时自动更改脚本标记url
我正在使用index.html
的以下代码运行Backbone节点
<script src="js/api/require.js"></script> <script>require(['js/require-cfg'],function(){require(['main'])});</script>
main.js
看起来像这样:
require(['app'], function(App){ App.initialize(); } );
在生产中,我使用r.js将文件编译到main-build.js
,并将index.html
文件中的链接从main
redirect到main-build
:
<script>require(['js/require-cfg'],function(){require(['main-build'])});</script>
目前,如果我想将我的代码部署到生产环境中,则必须手工将index.html
main-build
修改为main-build
,或者将链接保持为main-build
但将main-build.js
的内容更改为相同作为main.js
当我运行本地或testing环境,然后切换回部署到生产。
有没有更好的(自动)方式让代码在生产时使用编译的main-build.js
,以及在本地或testing环境中使用main.js
的内容?
例如:使用节点环境variables来更改index.html
的链接(不知道如何更改html!)或更改main-build.js
的内容,但是每次运行r.js以编译生产
我个人使用Gulp处理与gulp-html-replace的index.html
文件。
在开发中,你把你需要的标签。
<script src="js/api/require.js"></script> <!-- build:js --> <script>require(['js/require-cfg'],function(){require(['main'])});</script> <!-- endbuild -->
为了生产生产,创build一个使用gulp-html-replace插件的gulp任务:
var gulp = require('gulp'), htmlreplace = require('gulp-html-replace'); gulp.task('build', function() { return gulp.src("index.html") .pipe(htmlreplace({ js: { src: [['main-build']], tpl: '<script>require(["js/require-cfg"],function(){require(["%s"])});</script>' }, })) .pipe(gulp.dest("build/index.html")); });
如果你走了Gulp路线,你可以通过它来完成所有的构build过程。 例如,这是一个简单的r.js任务:
var rjs = require('requirejs'); gulp.task('optimize', function(done) { rjs.optimize({ name: "main", out: "build/js/main.min.js", /* ...other options */ }, function(buildResponse) { done(); }, done); });