【发布时间】:2018-06-25 14:34:12
【问题描述】:
我正在尝试查找和替换 js 文件中的导入语句。我需要考虑几个不同的变体:
// default-import.js
import foo from 'bar-shared';
// named-import.js
import {Foo} from 'bar-shared/foo';
// type-import.js
import type {FooType} from 'bar-shared/foo';
// multiline-import.js
import {
Foo,
reduceFoo,
} from 'bar-shared/foo';
// multiline-with-type-import.js
import {
Foo,
reduceFoo,
type FooType,
} from 'bar-shared/foo';
// multiple-import.js
import foo from 'bar-shared';
import {Foo} from 'bar-shared/foo';
import {
Baz
reduceBaz
} from 'bar-shared/baz';
我的最终目标是用@bar/core 替换bar-shared。但限制是:
- 我不知道具体的进口是什么
- 一个导入语句可以跨越多行
- 在一个文件中可以有多个bar-shared 的导入语句
我已经相当接近以下几点:
find . -type f -name "*.js" -exec \
perl -0777 -p -i -e "s/^import ([\s\S]*?) from 'bar-shared(.*)'/import \1 from '\@bar\/core\2'/gms" {} +
该脚本似乎并未找到所有实例。具体来说,最后一个示例类型,在文件中有多个 import 语句,似乎是真正的问题。
【问题讨论】:
-
除了删除
^,您还必须将(.*)更改为(.*?)。您只想捕获到下一个'。否则它将在第一次匹配中匹配该行的其余部分。