如何将文本作为npm脚本命令添加到文件前

时间:2019-03-29 12:15:32

标签: package.json npm-scripts

我正在写一个书签。我需要将"javascript:"放在经过编译的精简JavaScript之前。我正在寻找一种使用NPM package.json脚本来完成此操作的方法。

{ 
    "scripts": {
        "oar:transpile-typescript": "tsc --target es6  --lib dom,es6 ./OarBookmarklet/Oar.ts",
        "oar:minify-javascript": "jsmin -o ./OarBookmarklet/oar.min.js ./OarBookmarklet/oar.js",
        "oar:prepend-javascript": "[??? prepend `javascript:` to minified JavaScript ???]",
        "oar": "run-s oar:transpile-typescript oar:minify-javascript oar:prepend-javascript",
        "build": "run-s oar"
    }
}

2 个答案:

答案 0 :(得分:1)

如果它在类似Unix的操作系统上运行,则:

(printf 'javascript:' ; cat ./OarBookmarklet/oar.min.js) > ./OarBookmarklet/oar.bm.min.js

应该做这项工作。


根据OP的评论进行编辑

  

我的执行环境是Windows,...

在这种情况下,您应该可以使用:

(set /p junk="javascript:" <nul & type ./OarBookmarklet/oar.min.js) > ./OarBookmarklet/oar.bm.min.js

set /p ... <nul怪异是一种将一些文本发送到stdout而不附加换行符的方法。

答案 1 :(得分:0)

对于跨平台解决方案,请使用node.js,它是内置的fs.readFileSync(...)fs.writeFileSync(...)。这样,您的npm脚本在哪个外壳中运行(shcmd.exebashbash.exepwsh...都无关紧要)

要实现这一点,请考虑以下两种解决方案之一-它们本质上是相同的,只是应用方法不同。


解决方案A.使用单独的node.js脚本

创建以下脚本,将其保存为项目目录根目录中的 prepend.js ,即与 package.json 所在的目录相同。 / p>

prepend.js

const fs = require('fs');
const filepath = './OarBookmarklet/oar.min.js';
const data = fs.readFileSync(filepath);
fs.writeFileSync(filepath, 'javascript:' + data);

package.json

package.json 中定义oar:prepend-javascript npm脚本,如下所示::

"scripts": {
  ...
  "oar:prepend-javascript": "node prepend",
  ...
},

注意::在node.js上方调用脚本并执行所需的任务。如果您选择将 prepend.js 保存在与上述不同的目录中,请确保定义正确的路径,即"oar:prepend-javascript": "node ./some/other/path/to/prepend.js"


解决方案B。内嵌package.json中的node.js脚本

或者,您可以在npm脚本中内嵌 prepend.js 的内容,因此可以避免使用单独的.js文件。

package.json

package.json 中定义oar:prepend-javascript脚本,如下所示:

"scripts": {
  ...
  "oar:prepend-javascript": "node -e \"const fs = require('fs'); const fp = './OarBookmarklet/oar.min.js'; const d = fs.readFileSync(fp); fs.writeFileSync(fp, 'javascript:' + d);\""
  ...
},

注意:此处,使用nodejs命令行选项-e来评估嵌入式JavaScript。