BridgeCraft logobridgecraft
週報顧問服務作品集關於聯絡登入
聯絡

bridgecraft

從資料視覺化到 AI Agent,一直在找下一個 meta

文章主題指南週報顧問服務Labs作品集系統架構關於聯絡RSS

© 2026 BridgeCraft — Waiting7777. All rights reserved.

← 所有文章

How to build a vue component library

2020年1月15日 · Waiting7777 · 1 分鐘閱讀

Example Component

<template>
  <div>{{ display }}</div>
</template>

<script>
import moment from 'moment'
export default {
  data() {
      return {
          time: Date.now()
      }
  },
  computed: {
      display() {
          return moment(this.time).format("HH:mm:ss")
      }
  },
  created() {
      setInterval(() => {
          this.time = Date.now()
      }, 1000)
  }
}
</script>

這是一個很簡單的時鐘 component , 裡面會顯示目前的時間。

Webpack

接下來就要設定 webpack

const webpack = require('webpack')
const path = require('path')

module.exports = {
    entry: path.resolve(__dirname + '/src/main.js'),
    output: {
        path: path.resolve(__dirname + '/dist/'),
        filename: 'vue-clock.min.js',
        libraryTarget: 'umd',
        library: 'vue-clock',
        umdNamedDefine: true
    },
    externals: {
        moment: 'moment'
    },
    module: {
        loaders: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                include: __dirname,
                exclude: /node_modules/
            },
            {
                test: /\.vue$/,
                loader: 'vue-loader'
            },
            {
                test: /\.css$/,
                loader: 'style!less!css'
            }
        ]
    },
    plugins: [
        new webpack.optimize.UglifyJsPlugin({
            minimize: true,
            sourceMap: false,
            mangle: true,
            compress: {
                warnings: false
            }
        })
    ]
}

比較值得注意的部分是,因為原本 component 裡面有用到 moment.js ,但在包自己的 library 時就希望不要包進去。

externals: {
  moment: 'moment'
}

Browser and Node.js Bundle

在 webpack 打包時,是可以指定很多種模塊 ex: AMD, common.js, global… ,這次希望一次包成 browser 跟 node 兩邊可以同時使用的 library,所以在設定上是包成比較通用的 umd module,並且在引入點判斷有無 window 變數,有的話就代表是在 browser 環境。

import clock from './Clock.vue'

const Clock = {
    install: function(Vue){
        Vue.component('Clock', clock)
    }

}

export default Clock 

export { Clock }

if (typeof window !== 'undefined' && window.Vue) {
    window.Vue.use(Clock)
}

Conclusion

這次試著整理如何將寫好的 component 包成 library ,並且讓就算不用node.js webpack 開發的人,單純瀏覽器引入也能輕鬆使用。

Live Demo

Github

每週一篇 — 技術趨勢背後的商業邏輯

分享:

Waiting7777

WoW Arena 冠軍轉前端,用電競 meta 思維拆解技術趨勢。

關於作者

相關文章

GitHub 用 AI 自動跑 fuzzing — 資安測試要被取代了嗎?GitHub CopilotAI Agents+5

GitHub 用 AI 自動跑 fuzzing — 資安測試要被取代了嗎?

AI 做 fuzzing 這件事的意義不只是「測試更快」,而是把過去需要資安專家才能做的事民主化了。拆解 Taskflow Agent 的工作流程,評估它實際上能取代多少人工、局限在哪。

2026年9月25日 · Waiting7777 · 7 分鐘閱讀

繼續閱讀 →
VC 瘋投 Shopping Agent,但 Amazon 已經開始封鎖了:這個賽道值得賭嗎AI AgentsVC+4

VC 瘋投 Shopping Agent,但 Amazon 已經開始封鎖了:這個賽道值得賭嗎

把這篇跟 Amazon 封鎖 Meta 的事件一起看 — VC 瘋狂投錢進來,但平台方已經開始設防,這個賽道的商業風險遠比技術風險大。

2026年9月22日 · Waiting7777 · 7 分鐘閱讀

繼續閱讀 →
AI 第三時代:「永遠在線的 AI 同事」這個概念是真的嗎?GPTAI+2

AI 第三時代:「永遠在線的 AI 同事」這個概念是真的嗎?

從「AI 同事」這個框架切入,評估這個概念是真實趨勢還是產品行銷話術 — 什麼樣的工作場景真的需要 persistent AI,什麼場景還是用工具就夠了。

2026年9月20日 · Waiting7777 · 7 分鐘閱讀

繼續閱讀 →

這篇文章對你有幫助嗎?

每週一篇 — 技術趨勢背後的商業邏輯

AI 產業在變什麼、工程師該注意什麼——拆清楚寄到你的信箱。