I have these two Gulp tasks:
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})
);
}
Both run depending on the environment, one for production and the other for local development.
I'm having the issue that if in my file I have:
import { environment } from '../../../environments/environment'
export class Apis {
static bo = `${environment.boAPIUrl}/api/v1/bo`;
}
When I run the changeAPIEnvDirectoryForLocal task it replace the previous code with:
import { environment } from '../../../../../environments/environment'
This is because based on my code it should remain the same. I think the problem is for the replace search this two strings are the same:
../../../environments/environment
and
../environments/environment
Is there anyway to specify an exact match?
The easiest way is to include the
''s in your search term like so:Now it will look for the full term only. Escaping the
''s so tone'is included at the beginning and end of your search term also seems to work:By the way, your results are expected, gulp-replace will find
'../environments/environmentwithin../../../../../environments/environmentbecause it is there.Finally, you could use a regex with a positive lookbehind to solve your problem another way. Such as
(in a regex your path separators would have to be escaped)