【问题标题】:gulp-replace doesn't use an exact match of the search stringgulp-replace 不使用搜索字符串的完全匹配
【发布时间】:2019-10-08 20:21:33
【问题描述】:

我有这两个 Gulp 任务:

function changeAPIEnvDirectoryForProd() {
    return src('src/app/modules/models/ApiUrl.ts', { base: "src/app/modules/models/" })
    .pipe(replace('../../../environments/environment', '../environments/environment')).pipe(
        dest('src/app/modules/models/', {overwrite: true})
    );
}

function changeAPIEnvDirectoryForLocal() {
    return src('src/app/modules/models/ApiUrl.ts', { base: "src/app/modules/models/" })
    .pipe(replace('../environments/environment', '../../../environments/environment')).pipe(
        dest('src/app/modules/models/', {overwrite: true})
    );
}

两者都根据环境运行,一个用于生产,另一个用于本地开发。

我遇到的问题是,如果在我的文件中有:

import { environment } from '../../../environments/environment'

export class Apis {
    static bo = `${environment.boAPIUrl}/api/v1/bo`;
}

当我运行changeAPIEnvDirectoryForLocal 任务时,它会将之前的代码替换为:

import { environment } from '../../../../../environments/environment'

这是因为根据我的代码,它应该保持不变。我认为问题在于替换搜索这两个字符串是相同的:

../../../environments/environment

../environments/environment

是否有指定精确匹配的方法?

【问题讨论】:

    标签: node.js regex gulp gulp-replace


    【解决方案1】:

    最简单的方法是在您的搜索词中包含',如下所示:

    .pipe(replace("'../environments/environment'", '../../../environments/environment'))
    

    现在它将只查找完整的术语。转义 ' 的语气 ' 包含在搜索词的开头和结尾似乎也有效:

    .pipe(replace('\'../environments/environment\'', '../../../environments/environment'))
    

    顺便说一句,你的结果是预期的,gulp-replace 会在../../../../../environments/environment 中找到'../environments/environment,因为它在那里。

    最后,您可以使用正则表达式来积极地向后看,以另一种方式解决您的问题。比如

    .pipe(replace(/(?<=')..\/..\/..\/environments\/environment/g, '../../../environments/environment'))
    

    (在正则表达式中,您的路径分隔符必须被转义)

    【讨论】:

    • 谢谢@Mark,你是对的,我最终替换了整个句子:import { environment } from '../../../environments/environment' 不仅路径而且有效。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2012-12-01
    相关资源
    最近更新 更多