如何使用jscodeshift在文件开头插入一行
how to use jscodeshift to insert a line in the beginning of the file
// file
var a = "a" // what if this is import statement?
// jscodeshift
export default (file, api) => {
const j = api.jscodeshift;
const root = j(file.source);
root.find(j.VariableDeclaration)
.insertBefore("use strict");
return root.toSource();
}
如果文件的第一行代码不同,insertBefore 如何工作。例如(变量声明,导入语句)
看来您必须 "cast"
节点到 jscodeshift
。
一个解决方案是:
export default (file, api) => {
const j = api.jscodeshift
const root = j(file.source)
j(root.find(j.VariableDeclaration).at(0).get())
.insertBefore(
'"use strict";'
)
return root.toSource()
}
编辑
请您说明。
如果不管怎样都想在文件开头插入use strict
:
export default (file, api) => {
const j = api.jscodeshift
const s = '"use strict";';
const root = j(file.source)
root.get().node.program.body.unshift(s);
return root.toSource()
}
如果要在import
声明后加上use strict
,如果有的话:
export default (file, api) => {
const j = api.jscodeshift
const s = '"use strict";';
const root = j(file.source);
const imports = root.find(j.ImportDeclaration);
const n = imports.length;
if(n){
//j(imports.at(0).get()).insertBefore(s); // before the imports
j(imports.at(n-1).get()).insertAfter(s); // after the imports
}else{
root.get().node.program.body.unshift(s); // begining of file
}
return root.toSource();
}
我目前最好的解决方案是在第一个 j.Declaration
,
之前插入
j(root.find(j.Declaration).at(0).get())
.insertBefore('"use strict";')
// file
var a = "a" // what if this is import statement?
// jscodeshift
export default (file, api) => {
const j = api.jscodeshift;
const root = j(file.source);
root.find(j.VariableDeclaration)
.insertBefore("use strict");
return root.toSource();
}
如果文件的第一行代码不同,insertBefore 如何工作。例如(变量声明,导入语句)
看来您必须 "cast"
节点到 jscodeshift
。
一个解决方案是:
export default (file, api) => {
const j = api.jscodeshift
const root = j(file.source)
j(root.find(j.VariableDeclaration).at(0).get())
.insertBefore(
'"use strict";'
)
return root.toSource()
}
编辑
请您说明。
如果不管怎样都想在文件开头插入use strict
:
export default (file, api) => {
const j = api.jscodeshift
const s = '"use strict";';
const root = j(file.source)
root.get().node.program.body.unshift(s);
return root.toSource()
}
如果要在import
声明后加上use strict
,如果有的话:
export default (file, api) => {
const j = api.jscodeshift
const s = '"use strict";';
const root = j(file.source);
const imports = root.find(j.ImportDeclaration);
const n = imports.length;
if(n){
//j(imports.at(0).get()).insertBefore(s); // before the imports
j(imports.at(n-1).get()).insertAfter(s); // after the imports
}else{
root.get().node.program.body.unshift(s); // begining of file
}
return root.toSource();
}
我目前最好的解决方案是在第一个 j.Declaration
,
j(root.find(j.Declaration).at(0).get())
.insertBefore('"use strict";')