環(huán)境是 electron+ vue+ webpack,在electron框架下好像webpack無法運(yùn)行本地服務(wù)端。所以,現(xiàn)在考慮直接用本地文件構(gòu)建vue路由。
根據(jù)vue的sample進(jìn)行了各種配置,結(jié)果如下
webpack.config.js
/* eslint strict: 0 */
'use strict';
const path = require('path');
const webpack = require('webpack');
module.exports ={
devtool: '#eval-source-map',
entry: "./src/render/index.js",
output: {
path: path.resolve(__dirname,'./dist'),
publicPath: "/dist/",
filename: 'build.js'
},
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js' // vue.common.js vue.js 都使用過
}
},
module: {
rules:[
{
test: /\.vue$/,
use: {
loader: 'vue-loader'
}
},
{
test: /\.js$/,
loader: 'react-hot-loader/webpack',
include: path.join(__dirname, 'src')
},
{
test: /\.html$/,
use: {
loader:"html-loader"
}
},
{
test: /\.js$/,
loader:"babel-loader",
exclude:/node_modules/,
query:{
presets:["es2015", 'react']
}
},
{test: /\.(png|jpg|gif)$/,loader: 'file-loader?name=[name].[ext]?[hash]' +
'&outputPath=../src/assets/images' +
'&useRelativePath=false'},
{test: /\.css$/,loader: 'style-loader!css-loader'},
{test: /\.eot/,loader : 'file-loader?prefix=font/&outputPath=/../src/assets/fonts/&useRelativePath=false'},
{test: /\.woff/,loader : 'file-loader?prefix=font/&outputPath=../src/assets/fonts/&useRelativePath=false' +
'&limit=10000&mimetype=application/font-woff'},
{test: /\.woff2/,loader : 'file-loader?prefix=font/&outputPath=../src/assets/fonts/&useRelativePath=false'},
{test: /\.ttf/, loader : 'file-loader?prefix=font/&outputPath=/../src/assets/fonts/&useRelativePath=false'},
{test: /\.svg/, loader : 'file-loader?prefix=font/&outputPath=/../src/assets/fonts/&useRelativePath=false'}
],
},
plugins: [
new webpack.DefinePlugin({
'process.env.NODE.ENV':"production"http://development" //定義產(chǎn)品類型
}),
new webpack.ProvidePlugin({
jQuery: "jquery",
$: "jquery"
})
]
};
package.json
{
"name": "HimTalk",
"version": "1.0.0",
"description": "Talk.run 他說",
"main": "main.js",
"scripts": {
"build": "webpack",
"dev": "webpack-dev-server --inline --progress --hot --content-base ./src/templates",
"start": "webpack & electron .",
"packager": "webpack && electron-packager ./ Himtalk --mac --out ./dist --version 1.0.0 --overwrite --icon=./public/icon/icon.ico"
},
"repository": "https://github.com/him-talk/him-talk-run",
"keywords": [
"Electron",
"quick",
"start",
"tutorial",
"demo"
],
"author": "Talk.run",
"license": "ISC",
"devDependencies": {
"babel": "^6.23.0",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-register": "^6.9.0",
"bootstrap-loader": "^2.2.0",
"css-loader": "^0.28.8",
"electron": "~1.7.8",
"electron-packager": "^10.1.1",
"express": "^4.16.2",
"extract-text-webpack-plugin": "^3.0.2",
"file-loader": "^1.1.6",
"html-loader": "^0.5.4",
"html-webpack-plugin": "^2.30.1",
"is-electron-renderer": "^2.0.1",
"jquery": "^2.2.4",
"react-hot-loader": "^3.1.3",
"style-loader": "^0.19.1",
"url-loader": "^0.6.2",
"vue-loader": "^13.6.2",
"vue-template-compiler": "^2.5.13",
"webpack": "^2.5.1",
"webpack-dev-server": "^2.4.5",
"webpack-target-electron-renderer": "^0.4.0"
},
"dependencies": {
"bootstrap": "^3.3.7",
"font-awesome": "^4.7.0",
"html5shiv": "^3.7.3",
"react": "^16.2.0",
"react-dom": "^16.2.0",
"respond": "^0.9.0",
"vue": "^2.5.13",
"vue-router": "^2.8.1"
},
"browser": {
"vue": "vue/dist/vue.common.js"
}
}
index.html 入口文件
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3個(gè)meta標(biāo)簽*必須*放在最前面,任何其他內(nèi)容都*必須*跟隨其后! -->
<title>{{ name }}</title>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<link href="public/css/ie10-viewport-bug-workaround.css" rel="stylesheet"/>
<![endif]-->
<!--[if lt IE 9]>
<script src="public/js/ie8-responsive-file-warning.js"></script><![endif]-->
<script src="public/js/ie-emulation-modes-warning.js"></script>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script>
require("html5shiv")
require("respond")
</script>
<![endif]-->
</head>
<body>
<div id="container">
{{ message }}
</div>
<script src="./dist/build.js"></script>
</body>
</html>
main.js 入口腳本文件
window.$ = window.jQuery = require("jquery");
import "bootstrap";
import "bootstrap/dist/css/bootstrap.css";
import "font-awesome/css/font-awesome.css";
import '../../public/css/default.css';
import language from "../../public/js/lang"
import Vue from "vue"
import routes from "../../public/js/routes"
Vue.config.debug=true;
//實(shí)例化Vue
// Vue.config.productionTip = false;
// Vue.config.devtools = false;
var pagecontent;
const defaultlang = window.localStorage && window.localStorage.getItem('lang') || process.env.LANG.split(".")[0];
window.localStorage.setItem("lang", defaultlang);
const data = combin_merge(language.config, language[defaultlang]);
data.name = process.env.NAME;
data.message = "Hello World! Welcome to HimTalk";
const vm = new Vue({
el: "#container",
data,
template: '<App/>',
computed: {
ViewComponent() {
const hash = window.location.hash.split("#")[1] ? window.location.hash.split("#")[1] : "/";
const matchingView = routes[hash];
console.log(routes);
console.log("index:"+matchingView);
if(matchingView){
pagecontent = require('../templates/' + matchingView + ".vue");
}else{
pagecontent = require("../templates/404.vue");
}
return pagecontent;
}
},
render (h) {
return h(this.ViewComponent)
}
});
routes 路由文件
export default {
"/": "index",
"/pool": "pool",
"/block": "block",
"/group": "group",
"/overview": "overview",
"/send": "send",
"/received": "received",
"/transaction": "transaction",
"/chat": "chat",
"/firend": "firend",
"/task": "task",
"/market": "market",
};
默認(rèn)index.vue
<template>
<div id="container">
<header></header>
<div class="container-fluid content">
<div class="row">
<leftview></leftview>
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<rightview></rightview>
</div>
</div>
</div>
<footer></footer>
</div>
</template>
<script>
import header from "../templates/header.vue"
import leftview from "../templates/left.vue"
import rightview from "../templates/right.vue"
import footer from "../templates/footer.vue"
export default {
name: 'index',
component:{
header,
leftview,
rightview,
footer
}
}
</script>
求各位大神看看到底是什么問題導(dǎo)致無法編譯模版到。錯(cuò)誤代碼提示
Failed to mount component : template or render function not defined.
這個(gè)問題折騰我一天了。初學(xué)vue和webpack框架,不甚明了,還望各位指定秘境
webpack配置別名到方法都測試過了,不適用于我這里。無論是vue.js vue.esm.js vue.common.js 都無效
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。