美文网首页
Vue第二周踩坑笔记

Vue第二周踩坑笔记

作者: 爱讲鸡汤的油腻大叔 | 来源:发表于2019-03-18 16:58 被阅读0次

    Powered by ThinkBig

    第二周踩坑笔记

    项目目录结构:

    --save-dev

    自动把模块和版本号添加到模块配置文件package.json中的依赖里devdependencies部分

    --save-dev与 --save 的区别

    --save安装包信息将加入到dependencies(生产阶段的依赖)

    --save-dev安装包信息将加入到devDependencies(开发阶段的依赖),所以开发阶段一般使用它

    踩坑点一:运行localhost:8080 cannot GET,也没有显示路由的#号,而在控制台终端并没有报任何错误

    原因一:

    使用了mode: history模式

    History模式要跑在服务端里面

    原因二:

    改过了config/index.js的部分配置

    因为我之前把assetsPublicPath:“/”改成”./”

    还原成”/”然后在本机运行cnpm run dev就成功了

    需要注意的是:

    打包文件时使用./

    assetsPublicPath: "./"

    本地运行时去掉.

    assetsPublicPath: "/"

    踩坑点二:

    自定义指令v-focua获取焦点失败

    失败描述:定义了私有属性directives,在里面设置了

    directives: {

    focus: {

    inserted: function(el) {

    el.focus();

    Console.log(‘ok’);

    }

    }

    },

    然后在里面使用自定义的属性v-focus

    <el-input

    type="text"

    v-model="form.verifyCode"

    auto-complete="off"

    placeholder="验证码"

    class="w-150"

    v-focus

    ></el-input>

    这样写的结果是在控制台可以输出ok,但是我们实际想得到的获取焦点的效果并没有实现

    然后,我用原生的元素里面使用v-focus属性,可以获取焦点,所以问题就出在我们使用了element-ui的关系

    解决方法:

    把directives改成以下

    directives: {

    focus: {

    inserted: function(el) {

    el.querySelector("input").focus();

    }

    }

    }

    踩坑点三:@究竟代表的是什么?

    在build目录下的webpack.base.conf.js文件下,有关于@的设置

    resolve方法的作用是返回src目录的绝对路径

    所以说,@代表的是该项目下‘src’目录的绝对路径

    踩坑点四:iView is not defined

    第一次使用ivew框架时就踩了一个大坑,在按照官方文档的方式在项目中引用了iview,其中核心代码为:

    import iView from 'iview';

    import 'iview/dist/styles/iview.css';

    Vue.use(iView);

    然而当我用了其他一些操作时,导致了发生了一个错误:经排除,造成这个错误的原因大部分是因为:使用了按需导入iview的方式。

    什么意思呢?我们来看一下官方为我们埋下的坑:这一步是没有问题的,按照这种方法可以实现iview的导入,然后:

    估计很多人像我一样,引入所有Vue.use(iView)之后就可以按需引入了,但是全局引用和局部引入是不能同时使用的可能这是一个常识,但是对于像我这样的新手来说,真是一个大大大的坑,第一次使用还真的很难意识到这点

    现在知道了原因就好办了,

    解决方法一:全局引用

    import iView from 'iview';

    import 'iview/dist/styles/iview.css';

    Vue.use(iView);

    //删除".babelrc"配置文件中的[

    //      "import",

    //      {

    //        "libraryName": "iview",

    //      "libraryDirectory": "src/components"

    //     }

    //    ]

    解决方法二:局部引入

    //删除Vue.use(iView); 和 import iView from 'iview';

    import { Button, Table } from 'iview';

    Vue.component('Button', Button);

    Vue.component('Table', Table);

    //安装babel-plugin-import插件,并在".babelrc"配置文件添加配置

      "plugins": [

    //......

        [

          "import",

          {

            "libraryName": "iview",

            "libraryDirectory": "src/components"

          }

        ]

      ] //babel插件

    踩坑点五:Module not found: Error: Can't resolve 'style-loader!css-loader!less-loader'

    在使用iview自定义主题的时候,导入.less包报错,module not found 看着一脸懵逼,毫无头绪,明明路径没错

    之前已经安装过了less和 less-loader

    如果你还没有配的话你可以使用一下两条语句来安装less和 less-loader

    npm i less --save

    npm i less-loader --save

    网上找了很多资料,就找到一篇是有用的

    其实都不用在webpack.base.conf.js里面配less-loader,

    但是需要在webpack.base.conf.js里面的extensions 数组添加一项 .less

    你在网上可能找到的是这样配的

    如:

    // {

    // test: /\.less$/,

    // // loader: "style-loader!css-loader!less-loader",

    // options: {

    // javascriptEnabled: true

    // }

    // }

    但是其实这样写只会更多错

    因为,你在安装vue-cli的时候,vue-vli脚手架已经帮你配置好less-loader了

    在bulid/utils.js你看到的是这样的

    less: generateLoaders("less"),

    说了这么多,要怎么改才能正确运行呢?

    很简单,改成这样就完事了

    less: generateLoaders("less", { javascriptEnabled: true }),

    保存一下,重新运行npm run dev就能运行了

    相关文章

      网友评论

          本文标题:Vue第二周踩坑笔记

          本文链接:https://www.haomeiwen.com/subject/bcimmqtx.html