如果是 java 直接 ide import 一下就好了。 可 js 如果不想让一个 js 文件又臭又长想分成几个文件的话就要写一堆麻烦的东西....
1
shintendo 2022-11-04 19:13:09 +08:00 2
一堆麻烦的东西是指?
|
2
thinkershare 2022-11-04 19:17:48 +08:00 1
不知道你在说啥??? JS 以前没有模块系统,从 ES6 以后,JS 原生支持 Module, 没看出来那里麻烦。
|
3
ragnaroks 2022-11-04 19:51:06 +08:00 1
用 java 类比的话,简而言之,javascript 没有 class
|
4
wdwwtzy 2022-11-04 19:58:04 +08:00
是的,js 就是这么个弱鸡语言,你敢相信一个连模块系统都没有的语言竟然能活下来?只能说山中无老虎猴子称大王了,web 前端之前各大公司都不重视,只有 js 这么一个语言,再垃圾也只能用他了。
|
5
xintianyou 2022-11-04 20:08:13 +08:00
@wdwwtzy 谁说 js 没有模块系统?
|
7
arnosolo 2022-11-04 20:14:27 +08:00 1
不会用 === 没有
|
8
Trim21 2022-11-04 20:16:16 +08:00 via Android
|
9
lsry 2022-11-04 20:16:20 +08:00
那只能说明 ide 不智能,找个好的 ide
|
10
nomagick 2022-11-04 20:22:47 +08:00
不是 js 没有 class 而是 js 程序员不懂面向对象
|
12
hamsterbase 2022-11-04 21:33:22 +08:00
ts 可以写成 java 那样。 AOP , 依赖注入。
贴一段 vs code 的源码。 export class RequestService extends Disposable implements IRequestService { constructor( @IConfigurationService configurationService: IConfigurationService, @INativeEnvironmentService private readonly environmentService: INativeEnvironmentService, @ILogService private readonly logService: ILogService ) { super(); } } |
14
pdog18 OP @shintendo 我能搜索到的最简单的「 nodejs 引入其他文件函数」的方式,点开一看: 一堆麻烦的东西....
|
15
pdog18 OP @hamsterbase 我的天呐
|
16
DrakeXiang 2022-11-04 22:44:13 +08:00 4
不就是一个 export 一个 import 吗?你是不是用百度搜的五年前的 csdn ?
|
17
hamsterbase 2022-11-04 22:50:20 +08:00 1
|
18
magicdawn 2022-11-04 22:56:56 +08:00 via Android 1
你说错了哦,java 没有模块系统,node.js 有好几套模块系统。
java 的包只能算命名空间,都在全局。import 只是方便你不写全名而已 |
19
molvqingtai 2022-11-04 23:00:24 +08:00 via Android 1
JS 怎么使用 import 引入模块 ❌
JS 引入文件又臭又长,不让 Java 方便 ✔️ |
20
djyde 2022-11-04 23:00:46 +08:00 1
如果你用 TypeScript 和支持 ts server 的编辑器 (例如 VS Code),那么你在引用一个成员的时候会自动帮你 import
|
21
pocarisweat 2022-11-04 23:09:34 +08:00 2
好像很多朋友都没有正面回答你的问题,我来尝试说下我的理解。
想象自己是一个小学生,要召集一群同学出去玩,要么可以自己去找一些认识的同学,然后再借助他们找到更多的同学;要么可以联系班主任,让他来协调所有同学出去玩。前者的缺点是你需要记得同学的联系方式并且主动联系他们,后者的缺点是需要依赖班主任这个额外角色。 对应到实际语言的模块系统里,上面前者的方式就像一些语言在代码里主动从文件引入依赖模块的做法,比如 JS 或者 Rust ,只要指定一个入口点,编译器就能一步步从入口点这个模块找到所有依赖的模块,构成一棵树,所以你需要「一些麻烦的东西」来自己联系小伙伴。(虽然 Rust 有 Cargo ,但 Cargo 并没有做这些事情,依然是 Rust 编译器完成的) 另一些语言,引入了独立的构建管理器来解决这个问题,比如 Java 和 Swift ,在这些语言里你就不需要手动去 import 某个具体文件,因为构建系统(班主任)已经帮你追踪好了每个模块的信息,再帮你完成这个事情。缺点就是这个构建系统对新手来讲容易像一个黑箱,没有 JS 一样手动 import 具体文件一样直观。 还有更原始的,那就是 C/C++,但它们也不过是直接把独立文件的构建过程暴露出来而已。你要用 CMake 等作为构建系统那也没问题。 |
22
humbass 2022-11-04 23:51:07 +08:00
大概理解 楼主 的意思,本人学习 swift 的时候,发现 swift 的函数、类所在的文件写在项目下任意地方都可以,只要名称不重复就行,从某种意义上来说引入非常的傻瓜化;
但是 JS 能活到现在肯定不是偶然的: 一是 API 相当稳定,从 es5-es6 ,API 是完全兼容的,以前怎么 用现在还是怎么用,所以菜鸟在网上搜索到的 例子 可以无脑的跑起来,像隔壁的 python 的 2-3 那叫一个坑。 其次,手动引入操作从某种程度上来说,也是一种克制化设计,并不需要完全自动化,但也能正确的运行起来,够用就好。 连谷歌的各种作妖操作,想换掉这门垃圾语言,你看看越来越多人使用。当年 flutter 如果想办法用 js 开发,流行程度肯定大不一样。 |
23
jones2000 2022-11-05 00:04:52 +08:00
js 你分几个文件,根本不需要引入, 只要再你使用的页面里面( <script src="js 文件"></script>)把你这几个文件都加上就行了。 根本不需要 import
|
25
xintianyou 2022-11-05 12:40:16 +08:00
@jones2000 你对 js 的印象还停留在几年前
|
26
jones2000 2022-11-05 13:17:18 +08:00
@xintianyou js 还分几年前,几年后的? 能跑起来不就可以了。
|
28
jones2000 2022-11-05 13:53:01 +08:00
@pdog18
@xintianyou test1.js ```javascript function ClassA() { this.Value ..... } ``` test2.js ```javascript function ClassB() { this.Value ..... } ``` 页面调试直接用 js 文件 ```javascript <script src="test1.js"></script> <script src="test2.js"></script> ``` vue, nodejs 等需要导出的加一个导出 js export.js ```javascript //把给外界调用的方法暴露出来 export default { ClassB: ClassB, ClassA: ClassA ... } ``` 用命令行合并文件就完事了。 copy test1.js+test2.js+export.js test.node.js /b 一般直接用浏览器调试,方便,不需要编译, 一个记事本+浏览器就可以开发了。前端开发要搞怎么复杂干什么呢,最后还不是编译成 es5 的 js 。 |
30
Manweill 2022-11-05 16:35:06 +08:00 1
|
31
yashika 2022-11-05 16:52:10 +08:00 1
我感觉你的问题应该是命名空间的范畴,早期 js 要敲一堆代码,现在依靠 namespace ,大大简化了导入要敲的代码了。
java 是默认引用了一堆全局的 namespace ,而 js 这边要达到同样的编码体验就是要用 ts 了。其实现代 PHP 也是依靠命名空间解决了此类问题的,使得导入变的规范多了。大家都在借鉴 java 的成功之处,哈哈。 |
32
zhangxh1023 2022-11-18 16:07:45 +08:00
js 的运行环境比较多,浏览器的 js ,Node.js 压根就不是一个东西。谁知道你要的是什么 js ,更不要说各类 js 的超集,打包工具,不同的模块规范。
不如说,为什么编程语言引用其他文件的函数相对来说要麻烦一些。 |