2015-02-28 16 views
49

Tôi không muốn nhập đối số thừa NODE_ENV='production' gulp mỗi khi tôi chạy gulp để đặt biến môi trường.Làm cách nào để đặt biến môi trường làm tác vụ gulp?

Tôi muốn đặt biến môi trường từ trong gulp qua tác vụ.

Điều gì sẽ là một cách hay để đạt được điều này?

+2

sử dụng 'yargs' &' gulp-constatnt' để tạo các tệp có 'env' dựa trên các đối số dòng lệnh đã thông qua – harishr

Trả lời

110
gulp.task('set-dev-node-env', function() { 
    return process.env.NODE_ENV = 'development'; 
}); 

gulp.task('set-prod-node-env', function() { 
    return process.env.NODE_ENV = 'production'; 
}); 

sử dụng nó như:

gulp.task('build_for_prod', ['set-prod-node-env'], function() { 
    // maybe here manipulate config object 
    config.paths.src.scripts = config.paths.deploy.scripts; 
    runSequence(
     'build', 
     's3' 
    ); 
}); 
+9

Câu trả lời đúng cho thấy cách thực hiện nhiệm vụ đơn giản mà không phụ thuộc quá mức –

+0

có thực hiện điều này không? Tôi đang ở trên osx nơi nó không: ( – wegginho

+0

@wegginho vâng, mã của bạn là gì? –

16

Hãy thử gulp-env

dụ vắn tắt về làm thế nào để thiết lập một số biến môi trường trước khi chạy nhiệm vụ nodemon:

// gulpfile.js 

var gulp = require('gulp'); 
var nodemon = require('nodemon'); 
var env = require('gulp-env'); 

gulp.task('nodemon', function() { 
    // nodemon server (just an example task) 
}); 

gulp.task('set-env', function() { 
    env({ 
    vars: { 
     MONGO_URI: "mongodb://localhost:27017/testdb-for-british-eyes-only", 
     PORT: 9001 
    } 
    }) 
}); 

gulp.task('default', ['set-env', 'nodemon']) 
+1

Khi tôi chạy điều này, tôi nhận được 'MONGO_URI không được định nghĩa' – Dallin

+0

Cách Node gốc có lẽ là tốt nhất như được hiển thị trong các câu trả lời khác trên bài đăng này. 'return process.env.NODE_ENV = 'production';' – dman

2

Bạn cũng có thể thiết lập theo mặc định và đọc các biến từ tệp json:

gulp.task('set-env', function() { 
    var envId = gutil.env.env; 
    if (!envId) { 
     envId = "dev"; 
    } 
    genv({ 
     file: "env." + envId + ".json" 
    }); 
}); 

này sẽ luôn dev env theo mặc định, và bạn có thể gọi nó là thiết lập env khác, như thế này:

gulp --env prod

More của gulp-env

6

Bạn cũng có thể xác định nó như một tập lệnh trong số package.json

{ 
    "name": "myapp", 
    "scripts": { 
    "gulp": "NODE_ENV='development' gulp", 
    "gulp-build": "NODE_ENV='production' gulp" 
    }, 
    ... 
} 

Và chạy nó với npm run gulp-build. Này có một số lợi ích

  • Bạn có thể xác lập luận một cách dễ dàng thay vì gõ chúng mỗi khi
  • cài đặt ngụm toàn cầu không được yêu cầu (tương tự cho các công cụ khác, như webpack)
  • Bạn có thể xác định nhiều biến thể với các biến môi trường khác nhau và (hoặc) đối số mà không thay đổi gulpfile (như bạn có thể thấy ở trên - gulp và gulp-build để phát triển và sản xuất tương ứng)
+0

Câu trả lời hay. Tôi nghĩ rằng điều quan trọng là cố gắng tận dụng những gì bạn đã có, trước khi giới thiệu một công cụ khác vào hỗn hợp! – Red2678

Các vấn đề liên quan