2017-12-27 16 views
10

にスタンドアロンのJSファイルを構築することができない私はここでカスタム要素を登録して使用するための指示に従っ:Vueのカスタム要素ディスト

https://alligator.io/vuejs/custom-elements/

私はVueのための標準WebPACKのテンプレートを使用しています。私は

npm run build 

を実行すると

私は、distディレクトリ内element.jsと呼ばれるパッケージ化されたWebコンポーネントファイルを取得することを期待しています。しかし、何も起こりません。余分なステップが必要な場合は誰にも知っていますか?ドキュメンテーションはこれを明確にしていません。

<template> 
    <div id="app"> 
    <example myProp="I can pass props!"></example> 

    </div> 
</template> 

<script> 
import Example from './components/example.Vue' 

export default { 
    name: 'app', 
    components: { 
    Example 
    } 
} 
</script> 

<style> 
</style> 

main.js

// The Vue build version to load with the `import` command 
// (runtime-only or standalone) has been set in webpack.base.conf with an alias. 
import Vue from 'vue' 
import App from './App' 
import vueCustomElement from 'vue-custom-element' 

Vue.config.productionTip = false 

Vue.use(vueCustomElement); 
/* eslint-disable no-new */ 

import Example from './components/Example.vue'; 

// Configure Vue to ignore the element name when defined outside of Vue. 
Vue.config.ignoredElements = [ 
    'example-component' 
]; 

// Enable the plugin 
Vue.use(vueCustomElement); 

// Register your component 
Vue.customElement('example-component', Example, { 
    // Additional Options: https://github.com/karol-f/vue-custom-element#options 
}); 


new Vue({ 
    el: '#app', 
    template: '<App/>', 
    components: { App } 
}) 

コンポーネント/ example.vue

<template> 
    <p>Dynamic prop value: {{myProp}}</p> 
</template> 

<script> 
export default { 
    props: ['myProp'] 
} 
</script> 

package.json

{ 
    "name": "example", 
    "version": "1.0.0", 
    "description": "A Vue.js project", 
    "author": "", 
    "private": true, 
    "scripts": { 
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 
    "start": "npm run dev", 
    "build": "node build/build.js" 
    }, 
    "dependencies": { 
    "vue": "^2.5.2", 
    "vue-custom-element": "^2.0.0" 
    }, 
    "devDependencies": { 
    "autoprefixer": "^7.1.2", 
    "babel-core": "^6.22.1", 
    "babel-helper-vue-jsx-merge-props": "^2.0.3", 
    "babel-loader": "^7.1.1", 
    "babel-plugin-syntax-jsx": "^6.18.0", 
    "babel-plugin-transform-runtime": "^6.22.0", 
    "babel-plugin-transform-vue-jsx": "^3.5.0", 
    "babel-preset-env": "^1.3.2", 
    "babel-preset-stage-2": "^6.22.0", 
    "chalk": "^2.0.1", 
    "copy-webpack-plugin": "^4.0.1", 
    "css-loader": "^0.28.0", 
    "extract-text-webpack-plugin": "^3.0.0", 
    "file-loader": "^1.1.4", 
    "friendly-errors-webpack-plugin": "^1.6.1", 
    "html-webpack-plugin": "^2.30.1", 
    "node-notifier": "^5.1.2", 
    "optimize-css-assets-webpack-plugin": "^3.2.0", 
    "ora": "^1.2.0", 
    "portfinder": "^1.0.13", 
    "postcss-import": "^11.0.0", 
    "postcss-loader": "^2.0.8", 
    "rimraf": "^2.6.0", 
    "semver": "^5.3.0", 
    "shelljs": "^0.7.6", 
    "uglifyjs-webpack-plugin": "^1.1.1", 
    "url-loader": "^0.5.8", 
    "vue-loader": "^13.3.0", 
    "vue-style-loader": "^3.0.1", 
    "vue-template-compiler": "^2.5.2", 
    "webpack": "^3.6.0", 
    "webpack-bundle-analyzer": "^2.9.0", 
    "webpack-dev-server": "^2.9.1", 
    "webpack-merge": "^4.1.0" 
    }, 
    "engines": { 
    "node": ">= 4.0.0", 
    "npm": ">= 3.0.0" 
    }, 
    "browserslist": [ 
    "> 1%", 
    "last 2 versions", 
    "not ie <= 8" 
    ] 
} 

この

は、次の私のプロジェクト内のファイルを作成しました

カスタム要素とVUEライブラリのスクリプトファイルを含めた後、私のindex.htmlは次のようになります。

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width,initial-scale=1.0"> 
    <title>example</title> 
    <script src="vue/dist/vue.min.js"></script> 
    <script src="vue-custom-element/dist/vue-custom-element.js"></script> 

    </head> 

    <body> 
    <div id="app"></div> 
    <!-- built files will be auto injected --> 
    </body> 

</html> 
+0

もう少し具体的にできますか? 1)「何も起こらない」という意味ですか?あなたは何が起こると思いましたか、何が起こったのですか?コンソールは何もしませんでしたか? '/ dist'には何も作られませんでしたか? 2)ビルドプロセスの最後には何を受け取ることが期待されますか?あなたが今設定した方法では、ページに入ってくるバンドルされたコンポーネントではありません。カスタム要素を1つ含みますが、それを使用しないバンドルされたVueアプリケーションになります。 vue-cli webpackテンプレートは、単一のコンポーネントではなく、アプリケーションを記述するためのものです。 –

+0

@LinusBorg '/ dist'に' example.js'を出力するには 'npm run build'が必要です。私の質問に含まれていたファイルがあれば、 "...スタンドアローンのスクリプトをビルドした後、そのスクリプトを任意のWebページに追加し、example-componentを次のようにレンダリングできるようにする必要があります。期待される。私はWebpackのビルドがまったく動作しないことを意味するものではありません。 –

+0

さて、webpackは、別々の 'example.js'ファイルが必要であることを知りません。 webpackの設定では、 'main.js'を'/dist/app.js'にコンパイルする必要があります。 Webpackテンプレートは、スタンドアロンコンポーネントではなく、アプリケーションをビルドするように設定されていると言います。私は小さな答えを書いてみるつもりですが、あなたがこれをやりたいのであれば変わるべきことがたくさんあります。成功するかどうかわかりません。 –

答えて

1

ドキュメントとalligator.ioの記事動作するためにそれを説明するが、しないでくださいvue-custom-elementにはまだVue.jsとvue-custom-elementのライブラリが必要です。

で生成されるwebpackを含む<script>を使用する必要があります。 http://vuetips.com/vue-web-components

この実装は、ページに含まれるVue.jsコアファイルと VUE-カスタム要素ライブラリを必要とします。


がいることを言及してチュートリアルを発見しました。

また、単一.jsのファイルにすべてを構築するテンプレートであるhttps://github.com/kartsims/vue-customelement-bundlerに言及しています。

+0

私はあなたを正しく理解しているかどうかはわかりませんが、あなたの助言に従おうとしましたが、スクリプトのタグでindex.htmlにライブラリパスを追加しました。それでも動作しません。私は現在のindex.htmlで質問を更新しました。見てください。 –

+0

@DavidJ。私はwebpackによって '/ dist/index.html'に作成されたパスを意味していました。そこに'

関連する問題