我正在写一个书签。我需要将"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"
}
}
答案 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脚本在哪个外壳中运行(sh
,cmd.exe
,bash
,bash.exe
,pwsh
,...
都无关紧要)
要实现这一点,请考虑以下两种解决方案之一-它们本质上是相同的,只是应用方法不同。
创建以下脚本,将其保存为项目目录根目录中的 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"
或者,您可以在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。