Как добавить текст в файл с помощью команды сценария npm - PullRequest
0 голосов
/ 29 марта 2019

Я пишу букмарклет. Мне нужно добавить "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 ]

1 голос
/ 30 марта 2019

Если это работает на чем-то похожем на Unix, то:

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

должен сделать работу.


Изменить в ответ на комментарий ОП :

Моя среда выполнения - Windows, ...

В этом случае вы сможете использовать:

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

Странность set /p ... <nul - это способ отправить некоторый текст на стандартный вывод без добавления новой строки.

0 голосов
/ 01 апреля 2019

Для кроссплатформенного решения используйте node.js, и он встроен fs.readFileSync(...) и fs.writeFileSync(...). Таким образом, не имеет значения, в какой оболочке выполняется ваш скрипт npm (sh, cmd.exe, bash, bash.exe, pwsh, ...)

Чтобы достичь этого, рассмотрите одно из следующих двух решений - по сути, это одни и те же разные способы применения.


Решение A. Использование отдельного скрипта node.js

Создайте следующий скрипт, давайте сохраним его как prepend.js в корне каталога проекта, то есть на том же уровне, где находится package.json .

prepend.js

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

package.json

Определите скрипт oar:prepend-javascript npm в package.json следующим образом: *

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

Примечание: Над node.js вызывает скрипт и выполняет требуемую задачу. Если вы решите сохранить prepend.js в другом каталоге, чем вышеупомянутый, убедитесь, что вы указали правильный путь к нему, то есть "oar:prepend-javascript": "node ./some/other/path/to/prepend.js"


Решение B. Вставьте скрипт node.js в package.json

Кроме того, вы можете встроить содержимое prepend.js в свой скрипт npm, что исключает использование отдельного .js файла.

package.json

Определите сценарий oar:prepend-javascript в package.json следующим образом:

"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.

...