LoginSignup
0
0

More than 5 years have passed since last update.

Node.js でダブルクォートやシングルクォートを使わずに文字列を標準出力に表示する方法を考えてみたけど、いい方法がない件

Last updated at Posted at 2018-11-02

追記

最初に要件をなんとなく書いたけれど、ちゃんと考えてみれば、「記号を使わない(大文字小文字数字 しか使えない)」という過激な要件になるんじゃないかなーって思いました。

最初に考えてた要件に漏れがあったわけなので、再考したいです。(要件が厳しすぎて、できる気がしないけど。)

発端

package.json の scripts フィールドに、「とりあえずなんか表示するだけの物を書きたい」ってことがあると思います。
しかし、JavaScript を使っているのだからクロスプラットフォーム対応するのは当然なので、以下のような要件があります。

なので、package.json に以下のように書くことはできません


  "scripts": {
    "test": "echo nothing"
    "start": "node -e \"console.log('not implemented')\""
  },

考えたやり方

RegExp の toString() を使う(ダメ)

  "scripts": {
    "test": "node -e console.log(/Hello/.toString())"
  }
$npm t

> test@0.0.0 start /test
> node -e console.log(/Hello/.toString())

/Hello/

ダメな点

  • / を使っている
    • ほんとに大丈夫か?って感じある。(たぶんダメ)
  • 表示したい文字列に使える文字が、大小文字数字 のみ。
    • 半角スペースが使えない
    • ,. も使えない(危なそうなので使いたくない)
    • 記号も使えない(危なそうなので使いたくない)
  • 文字列の最初と最後に / が入る

echo-cliを使う(たぶんダメ)

Windows 対応してない(テストしてないだけに見えますけどね。)

まとめ

良さげな方法がない。

結局、npm init して作られる、 "test": "echo \"Error: no test specified\" && exit 1" が最適解なのかなって思いました。(でもこれ、 && 使ってるから PowerShell だと動かないのでは…?

PowerShell でも動きました。(けど、やっぱり && とか \" は使いたくないなーって思いますね)

PS C:\tmp> npm t

> tmp@1.0.0 test C:\tmp
> echo "Error: no test specified" && exit 1

"Error: no test specified"
npm ERR! Test failed.  See above for more details.

PS C:\tmp> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.14409.1012
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14409.1012
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0