如下是关于前端项目模块化的实践,包含如下内容:javascript
在开始以前,有必要先查看使用 TypeScript 的原因,见 benefit-of-using-typescript.md。html
本文仍然不是 TypeScript 的参考或介绍,文档见于 TypeScript前端
tsconfig.json
文件是必须的,为了能在 es5 环境下使用,配置大概以下java
{ "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
再运行——前者是推荐方式,须要安装依赖node
yarn add typescript ts-node --dev
而后使用相似命令webpack
node some-file.ts --require ts-node/register
TypeScript 项目推荐使用 .ts
及 ES6 的 import
语法组织全部代码,咱们面临如下问题git
Q:遗留代码多是原生 JavaScript 编写的,在迁移到 TypeScript 以前,如何共存
A:须要添加对 ts-loader
的依赖,并在 webpack.config.js
中添加规则es6
module : { rules: [ { test : /\.ts$/, exclude: /node_modules/, loader : 'ts-loader', }, ], }, resolve: { // Add '.ts' and '.tsx' as a resolvable extension. extensions: ['.ts', '.tsx', '.js'], },
而后在业务中,咱们使用如下方式就能够引用遗留代码github
import base64 = require('./tool/base64'); // base64.js
Q:export default
会产生额外的 default
命名空间,如何消除
A :设置 webpack
的配置 config.output.libraryExport = 'default'
,形如web
output : { library : 'Enumerable', libraryTarget: 'umd', globalObject : 'this', libraryExport: 'default', path : path.join(__dirname, 'dist'), filename : 'enumerable.js', },
经过该配置,咱们能够编写类库 打包给原生应用调用
完整的 webpack.config.js
示例见于 webpack.config.js。