• 本文主要讲述在html中使用requirejs时,如何让IDEA更加智能识别javascript的方法。

测试时的目录结构,一种典型的 thinkphp 的结构,同时,在 a.thml 中通过 requirejs 引用 了 Public/Home/View/moduleA/a.js,

后面我们的测试,都在 a.js 中进行。

路径可识别 + amd

class, 对象,方法,都能完美识别

class 导出

我们在 Class1.js 中导出一个 Class,且只使用 AMD 方式导出,代码如下:

define([],
function () {
class Class1 {
static a() { } ia() { }
} return Class1;
})
    • 当我用 control 按下时,Class1 能识别,且能进入
    • 导出的符号 c1,能自动联想class静态,实例方法

对象导出

我们使用 moduleA/obj1.js 文件导出一个对象,代码如下:

define([],
function () {
return {
/**
* obj1 的 a 方法
*/
a: function () { },
}
})
    • 同导出class一样,能完美自动联想

路径不可识别 + amd

class导出

我们在 require.config 中配置了 modulaA/Class2.js 的路径,如下:

    require.config({
paths:{
'm1.class2': '../../../../Public/Home/View/moduleA/Class2',
}
})

Class2.js 文件与 Class1 结构一样,如下:

define([], function () {
class Class2 {
/**
* class2 的 static a 方法
*/
static a() { } /**
* class2 的 instance ia2 方法
*/
ia() { }
} return Class2;
})
    • 不能识别路径
    • 不能识别文件符号
    • 不能识别静态方法
    • 不能识别实例方法

解决办法

    • 如果存在同名的class ,需要两个 class 都使用@alias 别名,如果不存在同名class可以不用@alias
    • 如果有静态的字段或方法,使用@exports声明导出,且指定导出名字
    • 在引用的地方,通过@module指定模块的名字,且导入的变量名与类名相同

遗留问题:

    • Class3不是很好的被识别为 class,导致 Class3.ia 可以被导航(但导航是错的)。如下:

接下来我们通过 Class3 进行示例,Class3代码如下:

define([],
function () {
/**
* @alias n1.Class3
* @exports n1/Class3
*/
class Class3 {
static b = {
a: function () { }
}; /**
*
*/
constructor() { } /**
* class3 的 static a 方法
*/
static a() { } /**
* class3 的 instance ia2 方法
*/
ia() { }
} return Class3;
})

效果如下:

对象的导出

对象导出没有找到很方便的办法,只能通过 @typedefine 来定义类型,然后在用的地方声明类型,如下:

define([],
function () {
/**
* @typedef {Object} n1.obj1
* @property {Function} a
* @property {int} b
*/ let ob = {
/**
* obj1 的 a 方法
*/
a: function () { },
b: 1,
}; return ob;
})

obj1.js

路径可识别 + umd 和 路径不可识别 + umd

我们准备了一个umd导出的类,如下:

;(function (factory) {
'use strict';
if (typeof define === 'function' && define.amd) {
// AMD
define([], factory);
} else if (typeof module !== 'undefined' && module.exports) {
// CommonJS
module.exports = factory();
} else {
// Global
window.umd1 = factory();
}
}(function () { class umd1 {
static a() { } ia() { }
} return umd1;
}));

umd1.js

在使用过程中发现,静态,示例方法都无法联想。对象的导出,IDEA 更无法识别。

办法

对于类的导出,可以采用与 #路径不可识别 + amd 的类导出一样的解决办法。

对于对象的导出,只有采取@typedefine 方式了。。。

require.js与IDEA的配合的更多相关文章

  1. r.js打包注意事项 r.js打包 这个是配合require.js打包的

    这个./代表的是当前文件的父目录....打包的资源一定要在这个父目录中下面才行,,,,一定一定,要放在这个目录一下才能被正确找到. 不然只是copy了一份一模一样的文件夹和文件过去,并不会处理压缩啥的 ...

  2. Javascript模块化编程(三):require.js的用法

    Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...

  3. javascript模块化编程(三):require.js用法

    本文来自阮一峰 这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用require ...

  4. require.js工作原理(初始)

    详情:请见阮一峰老师的日志:http://www.ruanyifeng.com/blog/2012/11/require_js.html: 导入:<script data-main=" ...

  5. Javascript模块化编程(三):require.js的用法(转)

    这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的 ...

  6. require.js源码分析

    写的寥寥草草,博客园的布局怎么弄还没有研究,再保存一份草稿,日后在完善,深度研究 require.js 加载顺序 1:加载html主页,require.js文件 2:脚本执行到html中的script ...

  7. Angular.JS + Require.JS + angular-async-loader 来实现异步加载 angular 模块

    传统的 angular 应用不支持异步加载模块,必须在 module 启动的时候,所有模块必须预加载进来. 通过使用 angular-async-loader 库,我们可以使用 requirejs 等 ...

  8. require.js

    日期: 2012年11月 7日 http://www.ruanyifeng.com/blog/2012/11/require_js.html 这个系列的第一部分和第二部分,介绍了Javascript模 ...

  9. require.js 入门笔记

    网站越来越庞大,JS也是越写越多. 当所有的JS 都集中在 HTML的 head 部分时,网页加载变得很慢,很多的 JS代码也并不是全都适用在当前的页面,造成了代码的冗余度非常高. 而且长长的JS代码 ...

随机推荐

  1. React Hooks总结

    Hook 前言 什么是Hook 自从 16.8 版本开始,hooks 的出现使得你可以在不编写 class 的情况下使用状态管理以及其它 React 的特性. 那么在 React Hooks 出现之前 ...

  2. Spring Boot 集成 Flyway 实现数据库版本控制

    在项目迭代开发中,难免会有更新数据库 Schema 的情况,比如添加新表.在表中增加字段或者删除字段等,那么当我对数据库进行一系列操作后,如何快速地在其他同事的电脑上同步?如何在测试/生产服务器上快速 ...

  3. B. Preparing for Merge Sort

    \(考虑的时候,千万不能按照题目意思一组一组去模拟\) \(要发现每组的最后一个数一定大于下一组的最后一个数\) \(那我们可以把a中的数一个一个填充到vec中\) #include <bits ...

  4. E. Reachability from the Capital dfs暴力

    E. Reachability from the Capital 这个题目就是给你一个有向图,给你起点,问增加多少条边让这个图变成一个连通图. 这个因为n只有5000m只有5000 所以可以暴力枚举这 ...

  5. P2762 太空飞行计划问题 网络流

    题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪器的 ...

  6. VSCode最强助攻

    VSCode最强助攻 VS Code是前端界必备的开发工具.页面仔小杨简单介绍几款高效.好用的插件,让原本单薄的VS Code如虎添翼,开发效率倍增. vscode-icons vscode-icon ...

  7. 面向开发者的Docker实践

    show me the code and talk to me,做的出来更要说的明白 本文源码,请点击learnSpringboot 我是布尔bl,你的支持是我分享的动力! 一. 引入 有开发经验的都 ...

  8. C# 数据操作系列 - 2. ADO.NET操作

    0.前言 在上一篇中初略的介绍了一下SQL的基本写法,这一篇开始我们正式步入C#操作数据库的范围.通过这一系列的内容,我想大家能对于数据库交互有了一定的认识和基础.闲话不多说,先给大家介绍一个C#操作 ...

  9. Adobe Reader XI 打开后“已停止工作”的解决办法

    搜了好多方法按照步骤做完,基本无用,试了以下方法搞定. 具体方法是: 把域名解析到本机. 打开 C:\Windows\System32\drivers\etc\hosts 添加 127.0.0.1 a ...

  10. Openwrt:基于MT7628/MT7688的PWM驱动

    前言 MT7628/MT7688的PWM驱动相关资料较少,官方的datasheet基本也是一堆寄存器,啃了许久,终于嚼出了味道.由于PWM存在IO口复用的问题,所以要提前配置好GPIO的工作方式,不然 ...