npm link なにが便利か

tl;dr

手元で開発中のモジュールをローカルの別のプロジェクトで使いたいときに便利


  • いまあなたは『my-great-module』というすごい便利なモジュールを作っているとする

  • すごい便利なモジュールなのだけど一部未完成なのでnpmにパブリッシュするのはまだためらっている

  • でもすごい便利なモジュールなのでβでもいいから手元で開発中の別のプロジェクトで早く使いたい

    • なんとかしたい

みたいなときに便利。

もしくは、

  • 公開中のnpmモジュールに新機能付けたいけどドッグフーディングしたい
    • まだnpmに公開はしたくなくて、ローカルで試したい
      • ブランチ切って試したい

みたいなときに便利。

npm link

docs.npmjs.com

使い方書いてある。

使い方ザッと書くと

  1. 利用元のモジュールへ cdして npm link
$ cd my-great-module
$ npm link
  1. 利用先で npm link <モジュール名>
$ cd my-develop-other-project
$ npm link my-great-module

注意点

  • npmのグローバル(npm -g)にシンボリックリンク貼って参照している
  • npm link <モジュール名>
  • スコープモジュールの場合は @scope/モジュール名形式
    • 要は npm i するときと同じ形式でlinkする

yarmもあるよ


ようは自前のnpmモジュールを手元でシュッと試したいときとかに便利ですね

TypeScriptのコンパイル時に『Cannot find name 'EventListenerOrEventListenerObject'.』と怒られる

Firebase Cloud FunctionsをTSで書いて使おうとしていて $ firebase init functions したあとにとりあえずHello Worldしようと思ってハマった。

以下のgetting-startedをのindex.tsをコピーして

github.com

$ firebase deploy --only functions

したところtscコンパイルでいきなりエラーが出てしまった。

node_modules/@types/history/DOMUtils.d.ts:2:78 - error TS2304: Cannot find name 'EventListenerOrEventListenerObject'.

こう怒られる

../node_modules/@types/react-dom/index.d.ts:19:72 - error TS2304: Cannot find name 'Text'.

加えてこうも怒られる

解決手段

tsconfig.json"lib""dom"を足す

こんな感じ

{
  "compilerOptions": {
    "lib": ["es6","dom"], ← "dom"を足す
    "module": "commonjs",
    "noImplicitReturns": true,
    "outDir": "lib",
    "sourceMap": true,
    "target": "es6"
  },
  "compileOnSave": true,
  "include": [
    "src"
  ]
}
参考情報