命名空间 namespace

命名空间(之前叫做“内部模块”)来管理变量, 避免污染全局
page.ts

  1. namespace Home {
  2. class Header {
  3. constructor() {
  4. const elem = document.createElement('div');
  5. elem.innerText = 'This is Header';
  6. document.body.appendChild(elem);
  7. }
  8. }
  9. class Content {
  10. constructor() {
  11. const elem = document.createElement('div');
  12. elem.innerText = 'This is Content';
  13. document.body.appendChild(elem);
  14. }
  15. }
  16. class Footer {
  17. constructor() {
  18. const elem = document.createElement('div');
  19. elem.innerText = 'This is Footer';
  20. document.body.appendChild(elem);
  21. }
  22. }
  23. export class Page {
  24. constructor() {
  25. new Header();
  26. new Content();
  27. new Footer();
  28. }
  29. }
  30. }

index.js

  1. new Home.Page();

tsconfig.js

  1. "module": "commonjs"
  2. "outDir": "./dist",
  3. "root": "./src"

打包多个文件到一个文件(AMD 方式)

components.ts

  1. namespace Components {
  2. export interface user {
  3. name: string;
  4. }
  5. export class Header {
  6. constructor() {
  7. const elem = document.createElement('div');
  8. elem.innerText = 'This is Header';
  9. document.body.appendChild(elem);
  10. }
  11. }
  12. export class Content {
  13. constructor() {
  14. const elem = document.createElement('div');
  15. elem.innerText = 'This is Content';
  16. document.body.appendChild(elem);
  17. }
  18. }
  19. export class Footer {
  20. constructor() {
  21. const elem = document.createElement('div');
  22. elem.innerText = 'This is Footer';
  23. document.body.appendChild(elem);
  24. }
  25. }
  26. }

page.ts

  1. ///<reference path="components.ts" />
  2. namespace Home {
  3. export namespace Dell {
  4. export const teacher: Components.user = {
  5. name: 'dell'
  6. };
  7. }
  8. export class Page {
  9. constructor() {
  10. new Components.Header();
  11. new Components.Content();
  12. new Components.Footer();
  13. new Components.Footer();
  14. }
  15. }
  16. }

index.js

  1. <script src="./dist/page.js" ></script>
  2. <script>
  3. new Home.Page()
  4. </script>

tsconfig.json

  1. "module": "amd" ,
  2. "outFile": "./dist/page.js" /* Concatenate and emit output to single file. */,
  3. "outDir": "./dist" /* Redirect output structure to the directory. */,
  4. "rootDir": "./src"

4-9 import 对应的模块化

es的import实现模块管理

  • commonjs(CMD)
  • AMD

require引入模块

tsconfig.json

  1. "module": "amd" ,
  2. "outFile": "./dist/page.js" /* Concatenate and emit output to single file. */,
  3. "outDir": "./dist" /* Redirect output structure to the directory. */,
  4. "rootDir": "./src"

index.js

  1. <script src="https://cdn.bootcdn.net/ajax/libs/require.js/2.3.6/require.js"></script>
  2. <script src="./dist/page.js" ></script>
  3. <script>
  4. require(['page'], function() {
  5. new page.default()
  6. })
  7. </script>

page.ts

  1. import { Header, Content, Footer} from './components'
  2. export default class Page {
  3. constructor() {
  4. new Header();
  5. new Content();
  6. new Footer();
  7. }
  8. }

代码仓库:

4-10 使用Parcel打包TS代码

Parcel与wabpack相似, 不需要配置。
优势:

yarn init -y
tsc —init
yarn add parcel@next —dev
“start”: “parcel ./src/index.html”

tsconfig.json

  1. "outDir": "./dist" /* Redirect output structure to the directory. */,
  2. "rootDir": "./src"

index.html

  1. <script src="./dist/page.ts" ></script>

代码仓库: