gulp-replace не использует точное совпадение строки поиска - PullRequest
0 голосов
/ 08 октября 2019

У меня есть две задачи 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

В любом случае можно указать точное совпадение?

1 Ответ

0 голосов
/ 08 октября 2019

Самый простой способ - включить ' в ваш поисковый запрос следующим образом:

.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'))

(в регулярном выражении разделители пути должны быть экранированы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...