LoginSignup
17
12

More than 5 years have passed since last update.

Vue Componentをnpmパッケージ経由で配布する

Last updated at Posted at 2019-03-31

Vue Componentを共有する方法はVueファイルを直接渡したりするなど、いくつか方法があると思いますが、ちょうどnpmでライブラリを配布する方法を勉強したばかりなので、勉強がてらnpmパッケージとしてVue Componentを公開する方法を調べてみました。プロジェクトを跨いだり使いまわしたりするときにnpm経由で管理すると便利かと思います。

Install vue-sfc-rollup

公式ドキュメントにVue Componentをnpmパッケージにする方法が説明されています。基本的に、このドキュメントの手順に沿っていけば公開までできるかと思いますが、すでに公開までの環境を整えているリポジトリが存在します。

以下、公式ドキュメントの最後に謝辞として記載されている内容の抜粋です。

このページは 2018 年 3 月の VueConf.us で発表された Mike Dodge によるライトニング・トークの成果です。彼はこの手順を用いてサンプルの単一ファイルコンポーネントを基本に構築したユーティリティを npm に公開しました。このユーティリティは、 npm を通じて、 vue-sfc-rollup からダウンロードできます。さらに そのリポジトリをクローンして カスタマイズする事もできます。

私もこのリポジトリをカスタマイズしたら、簡単に公開できました。実はこのリポジトリを使う前は自前でセットアップしていましたが、JavaScriptのライブラリを作った時のようにうまくVue Componentとして公開できず、自前の設定は断念しました。

Setup

手順としてはリポジトリのREADMEに記載されている通りですが、ターミナルから以下のコマンドでプロジェクトディレクトリを作成することができます。

# Create project directory
npx vue-sfc-rollup

1_vQBVZKKZEl7sVi8pU3SqSw.png

Single Componentを選択すると、/srcディレクトリに、公開用のコンポーネントが作成されます。the npm name of your componentを公開するパッケージの名前にすると良いです。この名前が生成されるVueファイルのファイル名になります。

Vue CLI 3がインストールされていれば、ホット・モジュール・リロードでserveすることができます。

プロジェクトディレクトリのroot
vue serve ./src/your-component.vue

Build

ビルドすると、デフォルトの設定であれば/distフォルダに公開用のファイルが生成されます。嬉しいことに、これらのファイルはCommonJS/UMDES6 javascriptに対応しています。

プロジェクトディレクトリのroot
npm run build

npm アカウント

npmで公開するためのファイルは揃ったので、あとはpublishするだけです。その前にnpmのアカウントを作成していなければ、ここで作成しておきます。そして、ターミナルからも登録を行います。

npmのアカウントを登録しておく
npm adduser

package.json

package.jsonで公開用の設定を行います。filesプロパティはnpmでライブラリを公開した時、node_modulesのライブラリ名フォルダ内に置かれるディレクトリーとファイルを設定する項目です。もしVueファイルも同時に公開したいのであれば、ここにファイル名を記載すると良いでしょう。デフォルトの設定では公開されるようになっています。その他、各プロパティの内容はnpmの公式ドキュメントで確認できます。

npmパッケージを公開する
npm publish

これで公開できます。
手順としてはここまでなので、私個人としてはお手軽に公開できたという感覚です。

vue-hashtag-textarea

手前味噌ですが、私が公開したVue Componentを紹介します。このComponentの機能についてはこちらの記事で紹介しましたが、Facebookの投稿などでテキスト編集中にハッシュタグをハイライトさせる機能を持たせたTextarea Componentです。Draft.jsのhashtag pluginに似た機能をVueでも扱えるようにしました。編集中のハッシュタグハイライトと、編集中のハッシュタグを別のハッシュタグに置換することができます。また、プレビューモード時にはハッシュタグの選択ができます。まだ生まれたてなのでいろいろ不具合があるかもしれません。。。

1_7s7YUmUeqynFCflAinF8bw.gif

使用例
<template>
  <div class="container">
    <vue-hashtag-textarea :option=option />
  <div>  
</template>

<script>
  import VueHashtagTextarea from 'vue-hashtag-textarea'
  export default {
    components: {
      VueHashtagTextarea,
    },
    data() {
      return {
        option: {
          textColor: 'black',
          font: '14px "HiraKakuProN-W4-AlphaNum"',
          hashtagBackgroundColor: 'transparent',
          hashtagColor: '#ff0000',
          placeholder: 'Sentence for placeholder #place #holder',
          defaultContent: '',
          isEditMode: true          
        }
      }
    }
  }
</script>

テキストカラーとハッシュタグカラー、ハッシュタグの背景を変更することができます。イメージとしてはこんな感じです。

スクリーンショット 2019-03-31 19.43.57.png

npmパッケージはこちらです。
GitHubにも置いてあります。

17
12
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
17
12