質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1970閲覧

vueでビルドしたモジュールをchrome上でimportして動かす方法

Fushihara

総合スコア52

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/05/27 15:30

vueで作ったモジュールをvue-cli-service build --target libでビルドして、common js形式とumd形式のjsを作りました。
このモジュールをchromeブラウザ上で動かす方法を教えてください。

それぞれのファイルの先頭、モジュールをexportしている部分はこの様な感じです。
このサンプルに出てくるGoogleDocListというのは、今作っているvueコンポーネントの名前です。

js

1//commom.js 2module.exports = 3/******/ (function(modules) { // webpackBootstrap 4/******/ function hotDisposeChunk(chunkId) { 5/******/ delete installedChunks[chunkId]; 6/******/ } 7

js

1// umd.js 2(function webpackUniversalModuleDefinition(root, factory) { 3 if(typeof exports === 'object' && typeof module === 'object') 4 module.exports = factory(require("vue")); 5 else if(typeof define === 'function' && define.amd) 6 define([], factory); 7 else if(typeof exports === 'object') 8 exports["GoogleDocList"] = factory(require("vue")); 9 else 10 root["GoogleDocList"] = factory(root["Vue"]); 11})(this, function(__WEBPACK_EXTERNAL_MODULE_vue__) { 12return /******/ (function(modules) { // webpackBootstrap 13

このモジュールをchromeの中で以下のような書き方で使いたいですがエラーが出てしまいます。

html

1//index.html 2<script src="./module/index.js" type="module"></script>

js

1//module/index.js 2// importの方法はいろいろ試したがどれも駄目。 3import GoogleDocList from './common or umd.js'; 4import * as GoogleDocList from './common or umd.js'; 5import {GoogleDocList } from './common or umd.js'; 6 7const v = new GoogleDocList({ 8 propsData:{} 9}) 10v.$mount("#hogehoge");

chrome上でモジュールを使うには、以下のような書き方をする必要があると思うのですが、commom.js umd.js のどちらもその様な書き方にはなっていません。

js

1export class GoogleDocList { 2 // hogehoge 3}

これは vue-cli-serviceで何かオプションの指定が不足しているのでしょうか、
それとも module/index.jsでのimportの書き方が間違っているのでしょうか。教えてください。

動くけど避けたい書き方

今までは以下の書き方で書いていたのですが、この書き方ですとGoogleDocListがグローバルスコープに定義されてしまうので避けたいです。

html

1//index.html 2<script src="./module/umd.js" defer></script> 3<script src="./module/index.js" defer></script>

js

1//module/index.js 2// GoogleDocList 型はこのファイルの中でだけ参照できればいい 3const v = new GoogleDocList({ 4 propsData:{} 5}) 6v.$mount("#hogehoge");

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

commonjsもumdも、esモジュールがない時代の(commonjsは現役ではあるものの)古い規格です。

ejs形式で出力すると良いと思います。
と思ったのですが、

https://cli.vuejs.org/guide/build-targets.html#library

dist/myLib.common.js: A CommonJS bundle for consuming via bundlers (unfortunately, webpack currently does not support ES modules output format for bundles yet)

こんなことが書いてあるので、ちょっとわからないですね...。
webpackの最新版の状況を調べてみる必要があるかもしれません。

ブラウザのESモジュール対応はあまり進んでいないので、まだあまり需要がないのだと思います。

投稿2019/05/27 20:48

otolab

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otolab

2019/05/27 20:50

rollupjsはejsの出力に対応しているので、いったんそれも通すという手はあるかもしれません。 つまり、commonjsで出力して、それをインポートするだけの小さなファイルをrollupでes module形式で書き出す。(変換とかサポートしているかなぁ?)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問