以下是关于前端项目模块化的实践,包含以下内容:

  1. 搭建 NPM 私有仓库管理源码及依赖
  2. 使用 Webpack 打包基础设施代码
  3. 使用 TypeScript 编写可靠类库

在开始之前,有必要先查看使用 TypeScript 的缘由,见 benefit-of-using-typescript.md

本文仍然不是 TypeScript 的参考或介绍,文档见于 TypeScript

开始使用 TypeScript

tsconfig.json 文件是必须的,为了能在 es5 环境下使用,配置大概如下

{
  "compilerOptions": {
    "module": "commonjs",
    "allowSyntheticDefaultImports": true,
    "noImplicitAny": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "sourceMap": true,
    "target": "es6"
  },
  "include": [
    "src/**/*",
    "test/**/*"
  ],
  "exclude": [
    "node_modules",
    "**/*.spec.ts"
  ]
}

如果在开发阶段希望直接运行 TypeScript 的 .ts 文件而不是先编译成 .js 再运行——前者是推荐方式,需要安装依赖

yarn add typescript ts-node --dev

然后使用类似命令

node some-file.ts --require ts-node/register

在 TypeScript 中使用 Webpack 打包

TypeScript 项目推荐使用 .ts 及 ES6 的 import 语法组织所有代码,我们面临以下问题

Q:遗留代码可能是原生 JavaScript 编写的,在迁移到 TypeScript 之前,如何共存
A:需要添加对 ts-loader 的依赖,并在 webpack.config.js 中添加规则

        module : {
            rules: [
                {
                    test   : /\.ts$/,
                    exclude: /node_modules/,
                    loader : 'ts-loader',
                },
            ],
        },

        resolve: {
            // Add '.ts' and '.tsx' as a resolvable extension.
            extensions: ['.ts', '.tsx', '.js'],
        },

然后在业务中,我们使用以下方式就可以引用遗留代码

import base64 = require('./tool/base64'); // base64.js

Q:export default 会产生额外的 default 命名空间,如何消除
A :设置 webpack 的配置 config.output.libraryExport = 'default' ,形如

output : {
            library      : 'Enumerable',
            libraryTarget: 'umd',
            globalObject : 'this',
            libraryExport: 'default',
            path         : path.join(__dirname, 'dist'),
            filename     : 'enumerable.js',
        },

通过该配置,我们可以编写类库 打包给原生应用调用

完整的 webpack.config.js 示例见于 webpack.config.js

posted @ 2018-09-11 11:31 Jusfr 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 以下是关于前端项目模块化的实践,包含以下内容: 1. "搭建 NPM 私有仓库管理源码及依赖" ; 2. "使用 Webpack 打包基础设施代码" ; 3. "使用 TypeScript 编写可靠类库" "使用 TypeScript 的收益" 使用 Mocha/Jest 进行单元测试 [实现中] 阅读全文
posted @ 2018-09-11 11:24 Jusfr 阅读(437) 评论(0) 推荐(0) 编辑
摘要: 系列索引 1. "Unicode 与 Emoji" 2. "字典树 TrieTree 与性能测试" 3. "生产实践" 生产实践 我们最终要解决 Emoji 在浏览器和打印物上的显示一致。 进行了多番对比,,在显示效果和精度上,macOS 和 Unicode 标准的风格相近,最终决定使用 Unico 阅读全文
posted @ 2018-09-03 09:12 Jusfr 阅读(563) 评论(0) 推荐(0) 编辑
摘要: 系列索引 1. "Unicode 与 Emoji" 2. "字典树 TrieTree 与性能测试" 3. "生产实践" 在有了 Unicode 和 Emoji 的知识准备后,本文进入编码环节。 我们知道 Emoji 是 Unicode 字符序列后,自然能够理解 Emoji 查找和敏感词查找完全是一回 阅读全文
posted @ 2018-08-31 10:59 Jusfr 阅读(522) 评论(0) 推荐(1) 编辑
摘要: 系列索引 1. "Unicode 与 Emoji" 2. "字典树 TrieTree 与性能测试" 3. "生产实践" 前言 通常用户自行修改资料是很常见的需求,我们规定昵称长度在2到10之间。假设用户试图使用表情符号 作为用户名,请求是否合法? 打开浏览器控制台,输入 ,打印结果是11。 公司项目 阅读全文
posted @ 2018-08-30 13:30 Jusfr 阅读(935) 评论(0) 推荐(0) 编辑
摘要: 以下是关于前端项目模块化的实践,包含以下内容: 1. "搭建 NPM 私有仓库管理源码及依赖" ; 2. "使用 Webpack 打包基础设施代码" ; 3. "使用 TypeScript 编写可靠类库" "使用 TypeScript 的收益" 使用 Mocha/Jest 进行单元测试 [实现中] 阅读全文
posted @ 2018-08-28 21:52 Jusfr 阅读(514) 评论(0) 推荐(0) 编辑
摘要: 以下是关于前端项目模块化的实践,包含以下内容: 1. "搭建 NPM 私有仓库管理源码及依赖" ; 2. "使用 Webpack 打包基础设施代码" ; 3. "使用 TypeScript 编写可靠类库" "使用 TypeScript 的收益" 使用 Mocha/Jest 进行单元测试 [实现中] 阅读全文
posted @ 2018-08-28 14:20 Jusfr 阅读(1829) 评论(2) 推荐(0) 编辑
摘要: Git flow 出自 "A successful Git branching model" ,这里使用了一个前端项目配合本文稿实施了 git flow 并记录流程作出示例和参考,对 hotfix 与持续部署略有提及,本意是用作公司内部的技术安利。 所用源码及文档本身见于 "github jusfr 阅读全文
posted @ 2016-06-02 12:15 Jusfr 阅读(2345) 评论(0) 推荐(3) 编辑
摘要: Jusfr 原创,转载请注明来自 "博客园" TopicMetadataRequest/TopicMetadataResponse 前文简单说过“Kafka是自描述的”,是指其broker、topic、partition 信息可以通过 TopicMetadata API 获取。 TopicMetad 阅读全文
posted @ 2016-03-09 10:57 Jusfr 阅读(4461) 评论(1) 推荐(1) 编辑
摘要: Jusfr 原创,转载请注明来自 "博客园" 事件总线(EventBus)及其演进过程必须提到内存模型、传统的队列模型、发布 订阅模型。 内存模型:进程内模型,事件总线(EventBus)在内部遍历消费者(Consumer)列表传递数据; 队列模型:消息或事件持久化到传统消息队列(Queue)即返回 阅读全文
posted @ 2016-03-09 09:39 Jusfr 阅读(8636) 评论(7) 推荐(9) 编辑
点击右上角即可分享
微信分享提示