1windows 下使用命令报错

常见问题 - 图1

常见问题 - 图2

原因是,在当前执行命令的目录下有coolie.js文件,windows 在执行命令时会优先读取当前目录下的同名文件,如执行coolie命令即在当前目录查找coolie.js

解决方案:

  • 更换目录
  • 或者重命名 coolie.js
  • 或者删除 coolie.js

2coolie 为什么不支持 scss、less之类的预编译文件

scssless都属于预编译文件,只需要专门的编译工具监听文件修改实时编译即可。而如果 coolie 要支持的话,那么势必要监听文件修改后编译+构建了(事实上,fis、webpack等之类的就是这么做的)。

那么,什么是编译,什么是构建呢?

2.1什么是编译

利用编译程序从源语言编写的源程序产生目标程序的过程。(来源常见问题 - 图3百度百科

简而言之,将 A 语言转换成 B 语言的过程,称之为编译

如将scss转换为css语言,就是属于编译。

2.2什么是构建

这个词,在常见问题 - 图4百度百科上解释的不是很完整。

简而言之,在 A 语言的基础上进行二次修饰为构建,修饰结果还是 A 语言。

如将coolie.js压缩成coolie.min.js为构建,俗名“压缩”,前后两个文件还是 JS 文件,语言类型没有发生变化。

coolie-cli 是前端构建工具,因此,不具备编译功能。

3coolie@1.x 与 jquery 发生冲突

  1. <script src="js/jquery-2.1.1.js"></script>
  2. <script coolie src="./coolie.js" data-config="./coolie-config.js" data-main="main.js"></script>

运行时提示:

常见问题 - 图5

而如果把 jquery 移除掉:

  1. <script coolie src="./coolie.js" data-config="./coolie-config.js" data-main="main.js"></script>

运行正常:

常见问题 - 图6

3.1解决方案

将 coolie.js 放在最后即可:

  1. <script src="js/jquery-2.1.1.js"></script>
  2. <!--coolie 放在最后-->
  3. <script coolie src="./coolie.js" data-config="./coolie-config.js" data-main="main.js"></script>

运行正常:

常见问题 - 图7

3.2问题原因

页面上的script标签是同步加载的,如上一共有两个script,分别是coolie.jsjquery.jscoolie.js加载运行完成,激活了模块系统(全局注册define方法),然后就开始加载各种模块 A、B、C、D,而此时jquery.js也在加载运行完成,与正在加载的 A、B、C、D 发生了冲突,这也是目前所有模块化解决方案会带来的弊端。

  1. coolie.js --> ABCD
  2. jquery.js

如上,A、B、C、D 和 jquery.js 是一同加载运行的,而 jquery 从 1.7 以上就支持模块化了,所以各自发生了紊乱(路径匹配原则)。

  1. if ( typeof define === "function" && define.amd ) {
  2. define( "jquery", [], function() {
  3. return jQuery;
  4. });
  5. }

而将 coolie.js 放在最后就没有这个问题了:

  1. jquery.js
  2. coolie.js --> ABCD

如上,jquery.js 运行时,还未激活模块系统(未注册全局define方法),而当 coolie.js 去加载模块时,就不会与已运行的脚本发生冲突。

原文: https://coolie.ydr.me/introduction/common-problems