日常填坑

700 阅读2分钟

1.vue项目打包上线后提示错误 Uncaught SyntaxError: Unexpected token <

开发环境

  1. vue-cli3.0
  2. router开启了history模式
  3. 打包采取了dll方式优化

问题解决

  1. 当关闭history模式,重新打包发布,显示OK。但是浏览器路径会加上#号,显得不美观,所以此方式不合适
  2. 将dll方式打包引入移除,重新打包发布,问题解决。但是违背了优化原则,所以此方法也不合适
  3. 通过上面2个方法总结发现打包后引入的dll.js文件的路径是相对路径,其他引入的JS文件采取的是绝对路径。将打包后引入dll文件的路径修改成绝对路径。重新打包上传,问题彻底解决。
            /**
             *   将 dll 注入到 生成的 html 模板中
             */
            config.plugins.push(
                new AddAssetHtmlPlugin({
                    // dll文件位置
                    filepath: path.resolve(__dirname, "./public/vendor/*.js"),
                    // dll 引用路径
                    publicPath: "/vendor", (此处未修改之前是./)
                    // dll最终输出的目录
                    outputPath: "./vendor"
                })
            );

2.浅克隆

需求:在做后台顶部导航切换时候,跳转到子页面的时候需要将子页面打开一个新的标签页.

在创建新的标签页的时候,由于某些功能会使用同一页面,例如:新增、修改... 动手之前自己的想法是,跳转到新增会添加一个标签页,跳转到编辑又是一个标签页,每次进入之前会组件路由钩子里面将标签的标题进行修改

/**
 * @description 验证子页面的展示权限
 */
export const handleChildrenAuth = (to, next, btnName) => {
  const { ownPermission, parentTitle, navList } = to.meta;

  try {
    const authInfo = JSON.parse(ownPermission);

    const res = authInfo.find(e => e.id === btnName);

    to.meta.title = parentTitle + "-" + res.text;

    console.log(to.meta.title);

    navList.push({
      name: res.text,
      url: to.path
    });

    next();
  } catch (error) {
    next("/");
  }
};

当创建标签页面的时候会监听路由变化,将route直接存储到展示的数据里面

  /**
   * @addTagList      添加标签或者关闭一个标签
   */
  addTagList(state, { route, type = "unshift" }) {
    let data = localRead("tagList");
    if (type === "push") {
      if (data) {
        const result = data.find(item => item.name === route.name);

        if (result && result.path === route.path) {
          return;
        }
        if (result) {
          const index = state.tagList.findIndex(e => e.name === route.name);

          state.tagList.splice(index, 1, route);
        } else {
          state.tagList.push(JSON.parse(JSON.stringify(route)));
        }
      }
    } else {
      const result = data.findIndex(item => item.name === route.name);
      if (result > -1) data.splice(result, 1);
      state.tagList = data;
    }
    localSave("tagList", state.tagList);
  },

直接将state.tagList.push(route)的话,此时就是一个浅克隆,当你新增的时候修改标签标题的情况下,会将编辑标签的标题同时修改掉

3.使用flex布局,点击页面最小化出现页面计算缓慢情况

解决方案:在设置flex:1 / flex: auto 自适应的元素上设置overflow:hidden;

4.禁止浏览器自动填充账户密码

解决方案:在填充的input标签添加属性 autocomplete=“new-password”