• 本文主要讲述在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. speedtest 测试服务器上传下载速度

    下载speedtest.py wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py 赋予执行权限 ...

  2. C. Two Arrays(思维DP或组合数学)

    \(首先很容易想到一个O(n^4m)的DP\) \(设dp\ [i]\ [j]\ [q]\ 为长度i,a数组以j结尾,b数组以q结尾(q>=j)\) for(int i=1;i<=n;i+ ...

  3. 【Scala】什么是隐式转换?它又能用来干嘛?该怎么用

    文章目录 定义 隐式参数 隐式转换 隐式值:给方法提供参数 隐式视图 将Int和Double类型转换为String 狗狗学技能(使用别的类中的方法) 使用规则 定义 隐式参数 隐式参数指在函数或者方法 ...

  4. 【Kafka】自定义分区策略

    自定义分区策略 思路 Command+Option+shift+N 调出查询页面,找到producer包的Partitioner接口 Partitioner下有一个DefaultPartitioner ...

  5. STM32 OSAL操作系统抽象层的移植

    文章目录 什么是 OSAL? 源码安装 Linux 上OSAL的移植 STM32上OSAL的移植 关键点 测试代码 结语 附件 什么是 OSAL? 今天同学忽然问我有没有搞过OSAL,忽然间一头雾水, ...

  6. STM32 CubeIDE无法进行调试的问题

    解决了由于一个很容易忽视的细节最终导致系统配置存在错误造成STM32 CubeIDE无法进行调试的问题: 文章目录 来龙去脉 解决方案 反思 来龙去脉 在享受CubeIDE快速和便捷的服务之后,生成了 ...

  7. JS实现手机号码中间4位变星号

    这个问题,我们可以用截取字符串解决,以下我列出2种方法,小伙伴们可以根据自己的需要选择哦: ● 1,substring()方法用于提取字符串中介于两个指定下标之间的字符. '; //该号码是乱打出来的 ...

  8. Web的Cookies,Session,Application

    Cookies:客户端(浏览器)存储信息的地方 Session:服务器的内置对象,可以在这里存储信息.按用户区分,每个客户端有一个特定的SessionID.存储时间按分钟计. Application: ...

  9. JVM 调优测试 之 故意分配小的堆空间,观察gc回收打印的内容

    测试代码如下: @Test public void testPrintGcDetail(){ HashMap<String, List> gcMap = new HashMap<&g ...

  10. Mysql 常用函数(19)- mod 函数

    Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html mod 的作用 求余数,和%一样 mod的语法格式 ...