前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >fis3 commonJs中的moduleId

fis3 commonJs中的moduleId

作者头像
IMWeb前端团队
发布2019-12-04 13:03:57
4710
发布2019-12-04 13:03:57
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队

本文作者:IMWeb 袁飞翔 原文出处:IMWeb社区 未经同意,禁止转载

首先看一个有趣的问题

代码语言:javascript
复制
// fis-conf.js
fis.hook('commonjs')
    .match('/modules/common/utils', {
        isMod: true,
        moduleId: 'utils'  // 为utils设置一个moduleId,希望以后能直接require('utils')
    })
    .match('::package', {
        postpackager: [
            fis.plugin('loader', {
                resourceType: 'commonJs'
            })
        ]
    })
代码语言:javascript
复制
<!-- main.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <!-- etc.. --->
    <script>
        require('utils')
    </script>
</body>
</html>

想象中理想的输出

代码语言:javascript
复制
<!-- main.html -->
<html>
    <script src="/modules/common/utils.js"></script>
</html>
代码语言:javascript
复制
// /modules/common/utils.js
define('utils', function() {
    // ...
})

实际结果

代码语言:javascript
复制
<!-- main.html -->
<html lang="en">
    <!-- 不会有utils.js的引用,也就意味着fis并不能发现用moduleId直接引用的依赖 -->
    <!-- script src="/modules/common/utils.js"></script-->
</html>
代码语言:javascript
复制
// /modules/common/utils.js
define('utils', function() {
    // ...
})

解读

  • 实际上moduleId只决定本身的define语句
  • 要让fis识别出类似moduleId的短引用,可以配置commonJs的paths/packages映射
代码语言:javascript
复制
fis.hook('commonjs', {
    paths: {
        utils: '/modules/common/utils.js'
    }
})
  • 寻找文件依赖是在lookup阶段完成,lookup阶段并不是一个包含所有文件的阶段,而是处理单个文件的阶段,因此没有所有文件moduleId的映射表。lookup函数需要返回两个信息: moduleId和fileId, moduleId用于替换require()语句( 注②),fileId加入依赖中,所以lookup返回的moduleId需和相关文件的moduleId一致,否则会出现以下错误:
代码语言:javascript
复制
define('lib/A.js', function() {
})
代码语言:javascript
复制
<!-- main.html -->
<html>
    <script>
        require('modules/lib/A.js');
    </script>
</html>

注② lookup返回的moduleId

代码语言:javascript
复制
var A = require('lib/A.js')

编译成:

代码语言:javascript
复制
define('XX', function() {
    var A = require('modules/lib/A.js')
})
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-11-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先看一个有趣的问题
    • 想象中理想的输出
      • 实际结果
        • 注② lookup返回的moduleId
    • 解读
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档