systemJS在win7下的奇怪行为

从别人那里拷了份前端项目的代码,对方确定代码是可以正常运行的,不管是开发模式下serve还是生成模式下build都没问题。我拷过来,没做任何修改该,开发模式下serve还是正常的,build prod 就会出错(我用的win7, 他用的linux)。

错误信息比较明显,是systemJS builder buildStatic() 的时候找不到某些模块,实际上只要import的格式是 import(‘./someModule‘) , 对应的模块都找不到。 根据打印出的信息,发现systemJS对于这种格式的模块解析出的完整路径都是错的。具体错误形式如下:

parentModule.js这个文件的完整路径如下: f:\project\dist\tmp\app\someModule\parentModule.js
parentModule.js 中
import(‘./childModule‘)
显然,childModule.js的完整路径应该是
f:\project\dist\tmp\app\someModule\childModule.js
但是systemJS builder
解析出来的路径都是 f:\project\dist\tmp\app\childModule.js ,
结果就是找不到这个模块。
看起来,应该是builder的路径相关的配置有问题, 也就是说可能是 map,
path或者package的配置不对。最终发现,是path中的这么一条配置导致的: [join(this.TMP_DIR, app, ‘*‘)]:
${this.TMP_DIR}/app/*

github的issue上还真有个人碰到了类似的问题: https://github.com/systemjs/systemjs/issues/157
systemJS的作者的解释是:

The point is that you can never "step below" the path specified in
paths.

就是说path里面配置的路径,是没法使用 ./, 那么上面那条path配置的行为就导致:一个模块如果路径是
...\tmp\app\**\*.js,会被systemJS builder解析成
...\tmp\app\*.js。也就是说,只要该模块的路径匹配到 ...\tmp\app, 就直接提出模块名,添加到
...\tmp\app后面。
我觉得这真的是反直觉的行为:
首先,‘./‘这种相对路径的格式,真的需要按照path里面的配置来解析吗?真的会有人希望
‘./someModule.js‘ 不和当前目录的模块对应,而是对应某个其他的稀奇古怪的地方的模块吗?
第二,
[f:\project\dist\tmp\app\*]:‘f:\project\dist\tmp\app\*‘
这种配置,正常人都会觉得,冒号左边和右边的两个*的内容应该是一致的,
因为这种配置看起来就像是两个目录之间的映射关系,但是现在的情况是,左边的*表示路径上在f:\project\dist\tmp\app\之后的剩余的路径,而右边的*仅仅是模块名,不包含任何目录名称。
第三,为啥同样的配置,linux下运行正常,win7下就有这个问题。

时间: 2024-10-25 20:14:00

systemJS在win7下的奇怪行为的相关文章

Win7下硬盘安装CentOS7!

捣鼓了几天终于顺利的在win7上安装上CentOS7了,现在给大家分享下个人的经验. 参考文章: http://www.cnblogs.com/Johness/archive/2012/12/03/2800126.html http://fyq891014.blog.163.com/blog/static/20074019120136163938790/ 1.难点介绍:(1)linux系统能识别windows下FAT32文件系统,不能识别NTFS文件系统,所以在linux安装时,选择任何sda都

Win7下无法提交MapReduce Job到集群环境(转)

一. 对hadoop eclipse plugin认识不足 http://zy19982004.iteye.com/blog/2024467曾经说到我最hadoop eclipse plugin作用的认识.但事实上我犯了一个错误,Win7 Eclipse里的MyWordCount程序一直在本地运行,没有提交到集群环境上运行(查看192.168.1.200:50030)没有这个Job.运行方式分为两种,右键Run As Java Application Run on Hadoop 如果说Run A

win7下的mstsc ubuntu下的rdesktop

远程图形化登录, win7下: 开始->mstsc->10.108.103.93即可进行后续输入账号密码验证登录. 功能类似rdesktop. 如图: win7下的mstsc ubuntu下的rdesktop,码迷,mamicode.com

Win7下超级管理员创建普通权限任务

已转至新的博客 http://www.raysoftware点击打开链接.cn/?p=49 项目中用到一个功能,Win7下超级管理员创建普通权限任务. 试了几种办法,例如获取资源管理器的Token,然后以这个Token用CreateProcessWithTokenW创建任务.这样做是可以的. 但是如果当前没有资源管理器或者其他普通权限的任务怎么办?CreateToken自己构造一个Token也可以,但是那些参数看了就头大. 试了一下以超级用户方式启动任务管理器用菜单中的运行,居然是默认创建普通权

Win7下Eclipse中运行远程MapReduce程序

1.hadoop插件的参数配置 2.运行时的参数 3.运行结果 Win7下Eclipse中运行远程MapReduce程序,布布扣,bubuko.com

在win7 下编译MySQL源码

MySQL MySQL是一款优秀的开源数据库,在阿里.网易等各个互联网公司中有着广泛的应用.尽管各种NoSQL大行其道,但是关系型数据库依然必不可少. 作为一个新手,在Win7下用源码安装MySql数据库并不容易.我自己都折腾了好几天.今天把安装过程记录下来,其一是为了方便自己以后学习,其二则是分享过程,让学习者能够从我这篇文章中受益. 1. 编译环境及源码下载 编译环境:Visual Studio 2010 (Win7 32位) 编译工具: bison-2.4.1-setup.exe 下载地址

WIN7下使用VC2010调试uCOS-II 2.91

WIN7下使用VC2010调试uCOS-II 2.91 http://www.amobbs.com/thread-5462878-1-1.html ucos系统学习汇总 http://www.cnblogs.com/gmh915/category/212499.html WIN7下使用VC2010调试uCOS-II 2.91,码迷,mamicode.com

win7下安装docker的坑

1.win7使用toolbox安装docker,下载地址:https://get.daocloud.io/toolbox/ 2.安装toolbox,启动Oracle VM VirtualBox报错处理 Failed to instantiate CLSID_VirtualBox w/ IVirtualBox, but CLSID_VirtualBox w/ IUnknown works. PSDispatch looks fine. Weird. 解决办法: 修改注册表HKEY_CLASSES_

Win7下MongoDB的安装和使用

Win7下MongoDB的安装和使用 1.下载: http://www.mongodb.org/downloads 2.安装: 安装目录为 D:\mongodb\MongoDB 2.6 Standard 配置环境变量Path为 D:\mongodb\MongoDB 2.6 Standard\bin D:\mongodb\ 下建立一个data文件夹用于存放数据库文件 3.启动服务器: cmd下输入 mongod.exe --dbpath d:\mongodb\data 如果启动正常会看到类似如下的