gulp替换任务不起作用

时间:2015-06-11 03:49:52

标签: angularjs ionic-framework gulp

我正在使用AngularJS构建一个Ionic App,我有一个gulp任务应该替换文件中的数据。该任务执行时没有错误,但它不会替换它要替换的数据。它没有被执行。

gulp.task('replace', function () {  
  // Get the environment from the command line
  var env = args.env || 'localdev';

  // Read the settings from the right file
  var filename = env + '.json';

  var settings = JSON.parse(fs.readFileSync('./config/' + filename, 'utf8'));
  console.log(settings.apiUrl)
// Replace each placeholder with the correct value for the variable.  
  gulp.src(paths.replace)  
    .pipe(replace({
      patterns: [
        {
          match: 'apiUrl',
          replacement: settings.apiUrl
        }
      ]
    }))
  .pipe(gulp.dest('./js/services'));
  console.log("here")
});

js / constants.js文件

angular.module('loanstreet.constants',[])   
    .constant('apiUrl', '@@apiUrl');

localdev.json

{
  "apiUrl":"http://10.0.3.2:3000"
}

在替换apiUrl值后,它应该创建并发送到目标.js / services / constants.js,但它也不会创建它。

任何建议,因为我老实说无法看到代码有什么问题。任何帮助赞赏。

3 个答案:

答案 0 :(得分:1)

假设您使用gulp-replace,您使用的参数是错误的。

应为replace(pattern, replacement)

此外,我认为您的示例中的match值是错误的。它将替换键值。你需要匹配器中的@@。

将其更改为

.pipe(replace('@@apiUrl', settings.apiUrl))

如果您需要替换多项内容,请将更多来电链接到replace()

.pipe(replace('@@apiUrl', settings.apiUrl))
.pipe(replace('@@another', 'foo'))
.pipe(replace('@@more', 'bar'))

答案 1 :(得分:0)

我相信你应该换行:

gulp.src(paths.replace) 

要:

gulp.src('./js/constants.js') 

或以其他方式告诉我们paths.replace此时的价值。

答案 2 :(得分:0)

假设使用了gulp-replace-task,我得到的结果是,任务执行没有错误,但是没有发生数据替换。

env: windows
node: v10.14.1
gulp: 3.9.1

最后,我求助于使用applause.

因此,上面的代码将类似于:

applause      = require('applause'),
.... 

var settings = JSON.parse(fs.readFileSync('./config/' + filename, 'utf8'));
var options = {
  patterns: [
    {
      match: 'apiUrl',
      replacement: settings.apiUrl
    }
  ]
};

var applauseRunner = applause.create(options);
var result = applauseRunner.replace(content);

// Do something with the result.content (i.e. pipe to stream)

希望这对某人有帮助。