在传递给bash/shell命令之前,用代码 Package 导入的文件

qyzbxkaa  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(234)

我有一个npm脚本,但我认为这适用于任何bash命令:

node file.js

file.js的内容对于该问题而言可能是:

console.log('hello')

我想将file.js的内容 Package 在一些代码中,这样最终的“内容”就是:

console.log('start')
console.log('hello')
console.log('end')

现在,我在一个单独的文件中有开始/结束的东西,我调用它,它依次导入file.js文件

// wrapper.js
const foo = import('./file.js') 
console.log('start')
foo() // or whatever...
console.log('end')

那我叫它:

node wrapper.js

这种方法是可行的,但我尝试消除 Package 文件并直接传递内容-本质上是将2个字符串与文件内容连接起来,然后让node实用程序像文件一样接受它。(注意,这不是特定于节点cli的)

ni65a41a

ni65a41a1#

edit:Charles Duffy的评论推荐了一个更简单的解决方案,如果你只想 Package 一个文件,而不需要比这更复杂的东西。

{ 
 echo "console.log('start')" 
 cat ./file.js
 echo "console.log('end')"
} > ./wrapped.js

您可以使用cat来执行此操作。

printf '%s\n' "console.log('hello')" > ./file.js
cat <( printf '%s\n' "console.log('start')" ) \
     ./file.js \
    <( printf '%s\n' "console.log('end')" ) \
    > ./wrapped.js
cat ./wrapped.js
# outputs:
# console.log('start')
# console.log('hello')
# console.log('end')

它利用两个process substitutions<( command )语法)创建临时文件,其中包含要 Package 在脚本周围的内容,然后将这三个文件连接在一起形成一个文件。
如果不想将连接的数据写到文件中,可以将整个过程 Package 在另一个进程替换中,并以任何方式将其直接传递给命令。

node <(
cat <( printf '%s\n' "console.log('start')" ) \
     ./file.js \
    <( printf '%s\n' "console.log('end')" )
)

相关问题