vue和webpack構(gòu)建項(xiàng)目的一點(diǎn)補(bǔ)充

今天同學(xué)問(wèn)了我有關(guān) vue 和 webpack 構(gòu)建項(xiàng)目的過(guò)程,發(fā)現(xiàn)自己果然還是有很多缺乏的知識(shí)點(diǎn),尤其是 webpack 的一些配置,之前只知道怎么用 vue-cli 一鍵構(gòu)建項(xiàng)目,就對(duì) webpack 這些半知半解也沒(méi)有去學(xué)習(xí),光看文檔也很難理解它的用處。但是在自己的持續(xù)毅力 debug,終于解決問(wèn)題并且補(bǔ)了一頓 webpack 和 vue 的知識(shí)。趁著還記得趕緊搬小板凳記筆記,防止以后忘記了。

同學(xué)的原項(xiàng)目地址:https://gitee.com/qiapi/testrh.git
項(xiàng)目無(wú)法正常運(yùn)行起來(lái)。
目的:不使用vue-cli,使用vue單文件組件構(gòu)建項(xiàng)目,vue單文件組件需要配合webpack打包。
原項(xiàng)目結(jié)構(gòu):
app -----
- main.js //入口文件
- nav.vue //vue單文件組件
- test.js //一個(gè)純粹測(cè)試用的文件
public ----
- index.html
package.json
webpack.config.js

理論上 main.js 中正確引入組件,webpack 正確配置就可以正常運(yùn)行起來(lái)。
npm start 的時(shí)候 webpack 會(huì)根據(jù)配置文件的入口文件找到 main.js,打包相關(guān)依賴。打包 main.js 的時(shí)候根據(jù) new Vue 中的 el 屬性找到index.html中的掛載點(diǎn),將 template 的內(nèi)容掛載到該元素,components 屬性引入相關(guān)組件。

npm install

  1. 直接 npm start 運(yùn)行該項(xiàng)目,會(huì)發(fā)現(xiàn)缺少 webpack 和 webpack-dev-server 等相關(guān)依賴包,可以修改 package.json,然后直接 npm install
    可以安裝好相關(guān)依賴包。
    image.png

    瀏覽器控制臺(tái)會(huì)報(bào)上述錯(cuò)誤,嘗試修改為“./nav.vue”,原因是他沒(méi)有忽略后綴去匹配。也可以在 webpack 中配置(參考鏈接:https://segmentfault.com/q/1010000004707962/a-1020000004710230
reslove: {
    extensions: ['', '.js', '.json', '.vue', '.scss', '.css']
}
  1. 修改后就會(huì)發(fā)現(xiàn)webpack報(bào)錯(cuò)無(wú)法解析vue單文件組件中的template模板,提示安裝vue-template-compiler,同時(shí)安裝依賴包vuevue-template-compiler后此問(wèn)題解決。
  2. 在 main.js 中引入 import Vue from 'vue' 這是 main.js 文件中必須引入的。
    image.png
  3. 添加根目錄的 index.html 文件,仍然提示找不到 #app 的元素,懷疑
    main.js 根本找不到 index.html,思考了 webpack 如何去 index.html 里面找到 app 元素的,應(yīng)該在配置文件中有所體現(xiàn),不然 webpack 不知道去哪里找 index.html,對(duì)比了使用 vue-cli 的 webpack配置文件,搜索定位
    index 所在,發(fā)現(xiàn)了 HtmlWebpackPlugin 插件中存在,百度了這個(gè)插件的作用,就是用來(lái)確定這個(gè) index.html 的。
    參考鏈接:https://segmentfault.com/a/1190000007294861
    參考鏈接:https://segmentfault.com/a/1190000008590102
  4. 修改webpack配置文件HtmlWebpackPlugin的配置,瀏覽器控制臺(tái)出現(xiàn):[Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.(found in <Root>)
    頁(yè)面依舊空白,懷疑是其影響,百度出現(xiàn)這個(gè) warning 的原因。在
    webpack 配置文件中加入 resolve: { alias: { 'vue': 'vue/dist/vue.js' } } 配置別名,warning 問(wèn)題解決。頁(yè)面無(wú)任何warning
    image.png

    參考鏈接:http://blog.csdn.net/fengjingyu168/article/details/72911421
    參考鏈接:https://www.imooc.com/article/17868
  5. 頁(yè)面依舊空白,查看控制臺(tái)無(wú)任何報(bào)錯(cuò)和warning,審核元素頁(yè)面有app元素卻沒(méi)有渲染組件,main.js文件有引入也沒(méi)有渲染nav組件。此處webpack應(yīng)該
    沒(méi)有問(wèn)題,回到main.js 和nav.vue尋找問(wèn)題。


    image.png
  6. 檢查main.js修改new Vuecomponent的語(yǔ)法錯(cuò)誤為components,瀏覽器控制臺(tái)報(bào)warning:[Vue warn]: Do not use built-in or reserved HTML elements as component id: nav
    百度warning的原因是存在同名組件?懷疑問(wèn)題在組件名上面,修改組件名為大寫Nav,頁(yè)面的warning解決。
    參考鏈接:http://blog.csdn.net/qq_34645412/article/details/78846782
    image.png
  7. 頁(yè)面依舊空白,檢查main.js,加入template:"<Nav/>",頁(yè)面正常顯示了Nav組件。但是控制臺(tái)waring重新出現(xiàn)
    image.png

    9.修改nav.vue中的name為navigator,同時(shí)修改main.js中引用的組件名,頁(yè)面無(wú)warning了。

也補(bǔ)充學(xué)習(xí)了其他webpack相關(guān)知識(shí):
publicPath
參考鏈接:http://blog.csdn.net/kcetry/article/details/53300331
參考鏈接:https://www.cnblogs.com/yueliangcl/p/6679427.html
webpack2loader的新寫法:
參考鏈接:http://www.css88.com/doc/webpack2/concepts/loaders/

修改后的項(xiàng)目地址:https://gitee.com/qiapi/vue-webpack.git

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容