2017-12-27 293 views
10

建立獨立的JS文件我也跟着來註冊和使用這裏自定義元素的方向:Vue的自定義元素未能在DIST

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)你在構建過程結束時期望得到什麼?現在你已經設置了它的方式,它不會成爲一個捆綁在一個頁面中的組件 - 它將是一個綁定的Vue應用程序,它包括一個自定義元素,但不使用它。 vue-cli webpack模板旨在編寫應用程序,而不是單個組件。 –

+0

@LinusBorg我希望'npm run build'能夠輸出'/ dist'中的'example.js',除了它通常的功能之外。在alligator.io上的文檔明確指出,鑑於我在我的問題中包含的文件,「......在構建到獨立腳本之後,您應該能夠將該腳本添加到任何網頁,並使其呈現示例組件預期。」我不是說webpack構建根本不起作用。 –

+0

那麼,webpack不知道你想要一個單獨的'example.js'文件。 webpack配置說它應該將'main.js'編譯成'/ dist/app.js',沒有別的。當我說webpack模板設置爲構建應用程序而不是獨立組件時,這就是我的意思。我會盡量寫出一個小答案,但是如果你想這樣做還有很多需要改變的地方,不知道我是否成功了 –

回答

1

的文檔和alligator.io文章沒有解釋,但爲了工作,vue-custom-element仍然需要Vue.js和vue-custom-element庫。

所以你必須使用<script>包括那個webpack生成的index.html


發現了一個教程,提到: http://vuetips.com/vue-web-components

實現需要Vue.js核心文件和 VUE定製元素庫包含在您的網頁。

它還提到https://github.com/kartsims/vue-customelement-bundler這是建立一切成一個單一的.js文件的模板。

+0

我不確定我是否正確理解了你,但我試圖按照你的意見,並在腳本標記中將庫路徑添加到index.html中。它仍然不起作用。我用我目前的index.html更新了我的問題。請看一下。 –

+0

@DavidJ。我的意思是由'/ dist/index.html'中的webpack創建的路徑,您可以看到'