Help us understand the problem. What is going on with this article?

RAML: api-designer実行時にrequestが見つからずにエラーになる件について

More than 1 year has passed since last update.

はじめに

※この記事はnpmからインストールするapi-designerのバージョンが0.4.1の場合の話です。お読みいただいている時点でそれより新しいバージョンをnpm経由で使用している場合はこの記事の内容は参考にならないと思います。

APIのドキュメント作成にRAMLを使っていて、記述にはRAML用エディタのapi-designerが便利です。

エラー

しかし、2018年7月現在、READMEのRunning Locally通りnpmからインストールしても実行時に以下のようなエラーになります。

Error: Cannot find module 'request'
at Function.Module._resolveFilename (module.js:538:15)
at Function.Module._load (module.js:468:25)
at Module.require (module.js:587:17)
at require (internal/module.js:11:18)
at Object. (/Users/jvarg25/.nvm/versions/node/v8.9.4/lib/node_modules/api-designer/bin/api-designer.js:6:15)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)

原因

requestっていうHTTP通信するパッケージに依存しているのですが、このrequestが0.4.1ではdevDependenciesにいます。https://github.com/mulesoft/api-designer/blob/support/v0.4.1/package.json#L58
devDependenciesにいるパッケージはnpm install時に依存パッケージとしてインストールされません。そのためrequestはインストールされず、上記のエラーが発生します。
実行に必要なパッケージは本来はdependenciesにいるべきです。

対応策

しかしmasterではdependenciesの中にいます。https://github.com/mulesoft/api-designer/blob/master/package.json#L22
なので、masterにあるコードをインストールすることで上記のエラーは回避できます。

npm install -g mulesoft/api-designer#master

エラーなくインストールされると思います。あとは普通にapi-designerを実行すればlocalhost:3000で立ち上がります。

npxで実行する場合はこちら

npx github: mulesoft/api-designer

対応策(非推奨)

個人的には良くないと思っていますが、requestをグローバルにインストールすればエラーは発生しなくなります。

npm install -g api-designer request

最後に

masterにあるコードをnpmにpublishすれば解決するが対応されない。issueはあります。https://github.com/mulesoft/api-designer/issues/509

不備や質問があればコメント欄かTwitter(@shisama_)までお願いいたします。

shisama
Node.js Core Collaborator. 関西Node学園Organizer.
https://shisama.dev
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away