vue路径优化之resolve

1. resolve.extensions 

  在webpack.base.conf.js中,我们可以看到resolve配置,其中的extengsions是一个数组,如下所示:

    extensions: ['.js', '.vue', '.json'],

  通过这样的配置,我们在组件中过着路由中应用组件时,就可以更为方便的应用,比如:

    import Hello from '@components/Hello';

  即Hello.vue这个组件我们不需要添加.vue后缀就可以引用到了,如果不用extensions, 我们就必须要用@components/Hello.vue来引入这个文件。 

 

 

2. resolve.alias

  在组件之间相互引用时,可能是下面这样的:

   import Hello from '../src.components/Hello';

  其中的路径是相对于当前页面的。 但是如果嵌套等更为复杂,那么写起来会比较麻烦。但是如果我们通过这样的配置:

   resolve: {
     extensions: ['.js', '.vue', '.json'],
     alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@pages': path.join(__dirname, "..", "src", "pages"),
      "@components": path.join(__dirname, "..", "src", "components"),
      // 注意: 静态资源通过src,不能这么设置。
      // "@assets": path.join(__dirname, "..", "src", "assets"),
    }
    

  其中vue$表示引入vue,就可以像下面这么写:

   import Vue from 'vue'

  另外,对于@pages和@components我们就可以直接引用了,而省去了一大堆的复杂应用,另外通过@可以消除歧义。如下所示:

  import Hello from '@components/Hello';
  import App from '@pages/App'

  值得注意的时: 在webpack.config.js中我们不能使用../ 以及./这种形式的路径方式,而是通过 path.join 和 __dirname 这种形式来表示路径,否则会报错。

  另外: 在组件中,我们会引用一些静态文件,即static下的文件, 这时我们就不能用 alias 下的配置了,而必须使用一般的配置方式。

### 解决 Vue 中 Editor 组件出现 'Cannot resolve a Slate node from DOM' 错误 当在 Vue 应用程序中使用编辑器组件(如基于 Slate.js 构建的富文本编辑器)时,可能会遇到错误 `'Cannot resolve a Slate node from DOM'`。此错误通常表明无法正确解析 DOM 节点与对应的 Slate 编辑节点之间的映射关系。 以下是可能的原因以及解决方案: #### 1. **DOM 和 Slate 节点未同步** Slate 需要确保其内部状态与其渲染到页面上的 DOM 结构保持一致。如果两者不同步,则可能导致该错误发生。 可以通过以下方式修复: - 确保每次更新编辑器的内容时都调用了 `editor.children` 或其他相关方法来触发重新渲染[^1]。 - 使用 `useEffect` 或类似的生命周期钩子,在数据变化后强制刷新视图。 ```javascript import { useEffect } from 'react'; function MyEditor({ content }) { const editorRef = useRef(); useEffect(() => { if (content && editorRef.current) { Transforms.insertNodes(editorRef.current, content); } }, [content]); return ( <Slate editor={editor} value={value}> {/* ... */} </Slate> ); } ``` #### 2. **异步加载问题** 如果组件是以异步形式加载的(例如通过动态导入),则可能存在初始化阶段尚未完成就尝试访问某些属性的情况。这会引发类似于 `[Vue warn]: Failed to resolve async component:` 的警告[^2]。因此建议优化懒加载逻辑并增加必要的兜底处理机制。 对于 Vue 用户来说,可以考虑调整如下配置项以避免此类冲突: - 设置全局选项中的 `compilerOptions.isCustomElement` 来排除特定标签名作为自定义元素识别范围之外的对象实例化过程; - 同时确认所依赖库文件均已成功打包进入最终产物之中而不会因按需引入策略丢失任何功能模块部分代码片段示例见下文所示: ```javascript // vue.config.js module.exports = { chainWebpack: config => { config.module.rule('js').include.add(/path-to-your-editor/).end(); }, }; ``` #### 3. **Node 版本兼容性** 有时开发环境中使用的 Node.js 版本过低也可能引起各种奇怪的行为表现比如找不到指定路径下的模块资源等问题描述为 "Cannot find module 'node:url'" 这种情况可通过安装最新稳定版或者借助 nvm 工具快速切换至适合当前项目的具体需求版本号从而有效规避上述异常状况的发生几率达到预期效果[^4]. 最后值得注意的是还有另外一种情形即当某个父级包裹层设置了特殊的过渡动画效果但其中嵌套有非标准 HTML 元素类型的子组件时候同样会出现类似报错提示信息内容提到关于 `<transition>` 标签内的孩子不是合法可动画单元节点之类的话语句结构表达形式[^3]. 此类场景需要仔细审查布局设计思路适当修改标记名称使其符合 W3C 规范要求即可恢复正常运作流程. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值