npm / gulp / nodejs:用于生产的不同文件

时间:2015-11-16 10:56:03

标签: node.js npm gulp

我有一个gulp脚本可以连接和缩小我的JavaScript。

使用gulp-html-replace插件,我可以用index.html中的连接文件替换我所有的JS依赖项。

我最终得到了一个dev版本(/dev/index.html),包含了所有单个JS文件(更容易调试)和一个生产版本,所有JS都连接在一起(/prod/index.html)。 / p>

现在我在config.js文件中有一个配置标志(在NodeJS中),我会执行以下操作:

res.render(((config.build === 'prod') ? './prod' : './dev') + 'myPage')

但我对此解决方案并不满意,因为它增加了大量代码,并且很容易忘记编写此代码。

  • 有更好的解决方案吗?
  • 此解决方案是否在Gulp中进行 (通过havign a gulp prodgulp dev
  • 或者它是在Node中进行的(例如通过设置虚拟目录)

我是这个npm / gulp / node工作流程的新手,不知道属于哪里

2 个答案:

答案 0 :(得分:1)

在您的应用初始化过程中,您可以设置视图的路径。

app.set('views', process.cwd() + ((config.build === 'prod') ? '/prod' : '/dev'));

现在您可以像这样调用render函数:

res.render('myPage');

答案 1 :(得分:1)

我喜欢这样做的方法是为index.html维护两个不同的版本。 适用于开发环境的index-development.html和适用于生产环境的index-production.html

index-development.html包括所有脚本和css(非缩小和连接)和index-production.html作为缩小和连接的脚本和CSS链接。

我从gulp脚本构建index.html

默认情况下,将部署index-development.html。 如果我为gulp脚本指定参数p,它将部署index-production.html

无需更新express router中要提供的文件的文件路径。

首先做

npm install yargs

在gulp中,我包括

var argv = require('yargs').argv;

检查参数pgulp -p)是否通过

传递给gulp(p用于生产)

var isProduction = argv.p;

然后,

if(isProduction){
    taskSequence = ['combineControllers','combineServices','productionsIndex','startServer'];
} else{
    taskSequence = ['developmentIndex','startServer'];
}


gulp.task('default', taskSequence);
gulp.task('startServer', function(){
    exec('npm start', function (err, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);
    cb(err);
  });
});
gulp.task('productionsIndex', function(done) {
    return gulp.src('./www/index-productions.html')
           .pipe(concat('index.html'))
           .pipe(gulp.dest('./public/'));
});

gulp.task('developmentIndex', function(done) {
    return gulp.src('./www/index-development.html')
           .pipe(concat('index.html'))
           .pipe(gulp.dest('./public/'));
});

这样,您的index.html文件将动态构建,而无需更改express中的代码,您可以像

那样提供服务

res.render('index');

如果您想在任何地方使用myPage.html,只需使用index.htmlindex替换上面代码中的myPage.htmlmyPage

编辑:

要在开发环境中启动应用程序,只需运行gulp

即可

要在生产环境中启动应用程序,只需运行gulp -p

即可

简单!