Как добавить hashbang в исполняемый файл Javascript, не нарушая поддержку браузера? - PullRequest
1 голос
/ 29 мая 2019

Можно ли иметь такой код:

#! /usr/local/bin/node
console.log("Hello world")

Что я тоже могу запустить в браузере?

У меня есть скрипт, который я запускаю локально и хочу запустить его в браузере, но сейчас мне нужно «перекомпилировать» его для цели браузера только для удаления строки hashbang.

Я не могу придумать, как обойти это. Есть идеи?

Редактировать: я использую то, что я не хочу иметь 2 файла, так как я хочу иметь возможность выполнять текущий файл во время работы с ним, а также обслуживать его через Интернет. Я думаю, что решение должно состоять в том, чтобы либо скомпилировать его для браузера во второй файл, либо использовать альтернативу #! это хорошо сочетается с JavaScript.

1 Ответ

1 голос
/ 31 мая 2019

Если вы когда-либо используете bash, вы можете воспользоваться одной из функций (?!) Bash: bash выполняет сценарии без лишнего шума, используя bash .Другие оболочки могут оставить его для ОС, которая обычно использует вместо /bin/sh.Например:

bash-5.0$ echo 'echo $1 $BASH_VERSION' > foo.sh
bash-5.0$ for sh in sh bash dash ksh zsh; do $sh -c "./foo.sh $sh"; done
sh 3.2.57(1)-release
bash 5.0.7(1)-release
dash 3.2.57(1)-release
ksh
zsh 3.2.57(1)-release

(/bin/sh - это ссылка на старую версию bash здесь в macOS.)

Итак, вы можете получить файл, подобный этому:

///usr/local/bin/node <(tail -n +1 "$0"); exit $?
console.log("Hello world")

Если вы запускаете это в браузере или других средствах запуска JavaScript, первая строка должна игнорироваться как комментарий.

Если вы запускаете это как скрипт в bash, первая строка сообщаетчтобы запустить ///usr/local/bin/node, используя подстановку процесса с tail для передачи остальной части файла на узел, а затем завершается:

bash-5.0$ cat foo.js
///usr/local/bin/node <(tail -n +1 "$0"); exit $?
console.log("Hello world")
bash-5.0$ ./foo.js
Hello world

Этот прием также может работать с ksh./// в начале пути не должно вызывать проблем - три или более / в начале пути эквивалентны одному /.

Но я настоятельно рекомендую вамвместо этого используйте скрипт-обертку, как это предлагается в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...