我正在研究react-flux,我已经配置了我的gulp文件,但是现在我应该动态地传递不同环境的URL(比如开发,生产等)。我有两个js文件(development.js,production.js),其中包含各个env的url列表。下面是我的gulp文件,我尝试过使用yargs,但我没有成功。
"use strict";
var gulp = require('gulp');
var connect = require('gulp-connect');
var open = require('gulp-open');
var browserify = require('browserify');
var babelify = require('babelify');
var source = require('vinyl-source-stream');
var concat = require('gulp-concat');
var lint = require('gulp-eslint');
var uglify = require('gulp-uglify');
var cssmin = require('gulp-cssmin');
var imagemin = require('gulp-imagemin');
var pump = require('pump');
var wait = require('gulp-wait');
var buffer = require('vinyl-buffer');
var Rename = require('rename');
var argv = require('yargs');
var config = {
port: 3000,
environment : !!argv.env ? argv.env : process.env.NODE_ENV || 'production',
devUrl: 'http://localhost',
paths: {
html: './src/*.html',
js: './src/scripts/**/*.js',
css: [
'node_modules/bootstrap/dist/css/bootstrap.css',
'node_modules/bootstrap/dist/css/bootstrap-theme.css',
'src/css/*.css'
],
dist: './dist',
tmp: './build',
dep: './dep',
images: './src/images/*.*',
mainJs: './src/scripts/main.js',
configFolder : './config',
urlFile : './src/scripts'
}
};
gulp.task('config', function() {
return gulp.src(config.paths.configFolder + '/' + config.environment + '.js')
.pipe(Rename('config.js'))
.pipe(gulp.dest(config.paths.urlFile));
});
//Start a local development server
gulp.task('connect', function () {
connect.server({
root: ['dist'],
port: config.port,
base: config.devUrl,
livereload: true
});
});
gulp.task('open', ['connect'], function () {
gulp.src('dist/index.html')
.pipe(open({uri: config.devUrl + ':' + config.port + '/'}));
});
gulp.task('html', function () {
gulp.src(config.paths.html)
.pipe(gulp.dest(config.paths.dist))
.pipe(connect.reload());
});
gulp.task('images', function () {
gulp.src(config.paths.images)
.pipe(gulp.dest(config.paths.dist + '/images'))
.pipe(connect.reload());
});
gulp.task('js', function () {
browserify(config.paths.mainJs,{debug:true})
.transform(babelify, {presets: ['es2015', 'react']})
.bundle()
.on('error', console.error.bind(console))
.pipe(source('bundle.js'))
.pipe(gulp.dest(config.paths.dist + '/scripts'))
.pipe(connect.reload());
});
gulp.task('css', function () {
gulp.src(config.paths.css)
.pipe(concat('bundle.css'))
.pipe(gulp.dest(config.paths.dist + '/css'))
.pipe(connect.reload());
});
gulp.task('lint', function () {
return gulp.src(config.paths.js)
.pipe(lint({config: 'eslint.config.json'}))
.pipe(lint.format());
});
gulp.task('watch', function () {
gulp.watch(config.paths.html, ['html']);
gulp.watch(config.paths.js, ['js', 'lint']);
gulp.watch(config.paths.images, ['images']);
gulp.watch(config.paths.css, ['css']);
});
gulp.task('build', ['config','lint','html','css','images'],function () {
browserify(config.paths.mainJs)
.transform(babelify, {presets: ['es2015', 'react']})
.bundle()
.on('error', console.error.bind(console))
.pipe(source('bundle.js'))
.pipe(buffer())
.pipe(uglify())
.pipe(gulp.dest(config.paths.dep + '/scripts'));
gulp.src(config.paths.dist + '/*.html')
.pipe(gulp.dest(config.paths.dep));
gulp.src(config.paths.dist + '/css/*.css')
.pipe(cssmin())
.pipe(gulp.dest(config.paths.dep + '/css'));
gulp.src(config.paths.dist + '/images/*.*')
.pipe(imagemin())
.pipe(gulp.dest(config.paths.dep + '/images'));
});
gulp.task('default', ['config', 'html', 'js', 'css', 'images', 'lint', 'open', 'watch']);
如何动态地为不同的环境传递不同的网址。当我进行gulp构建时,它应该从production.js获取url并构建包。
答案 0 :(得分:0)
最后,我可以使用“gulp-rename”来实现它。以下是我为解决这个问题而采取的步骤。
我在我的项目下创建了配置文件夹,其中我放置了我的“ development.js ”和“ production.js “(包含相应的网址)。
我使用 npm install --save gulp-rename <安装了“ gulp-rename ” / p>
我写了下面的代码
gulp.src(config.paths.configFolder + "/development.js")
.pipe(Rename("config.js"))
.pipe(gulp.dest("./src"));
此代码将从配置文件夹中 development.js 并将 重命名 更改为 < em> config.js 并将其放在 ./ src 文件夹中,以便您可以通过在项目中要求它来访问它。 / p>
在gulp构建任务中,我已将其替换为production.js
我们还可以使用env变量来减少代码中的冗余。