gulp-替换不使用搜索字符串的精确匹配
gulp-replace doesn't use an exact match of the search string
我有这两个 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
是否可以指定完全匹配?
最简单的方法是在您的搜索字词中包含 '
,如下所示:
.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'))
(在正则表达式中你的路径分隔符必须被转义)
我有这两个 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
是否可以指定完全匹配?
最简单的方法是在您的搜索字词中包含 '
,如下所示:
.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'))
(在正则表达式中你的路径分隔符必须被转义)