将 Angular2 TypeScript 文件和 JavaScript 文件分开到不同的文件夹中,可能是“dist”

IT技术 javascript json angular
2021-03-10 23:58:25

我正在使用angular.io 网站上5 分钟快速入门,其中包含如下文件结构:

angular2-quickstart
 app
   app.component.ts
   boot.ts
 index.html
 license.md
 package.json
 tsconfig.json

tsconfig.json 是这样的代码块:

{
  "compilerOptions": {
    "target": "ES5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules"
  ]
} 

还有 package.json:

{
  "name": "angular2-quickstart",
  "version": "1.0.0",
  "scripts": {
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "lite": "lite-server",
    "start": "concurrent \"npm run tsc:w\" \"npm run lite\" "
  },
  "license": "ISC",
  "dependencies": {
    "angular2": "2.0.0-beta.0",
    "systemjs": "0.19.6",
    "es6-promise": "^3.0.2",
    "es6-shim": "^0.33.3",
    "reflect-metadata": "0.1.2",
    "rxjs": "5.0.0-beta.0",
    "zone.js": "0.5.10"
  },
  "devDependencies": {
    "concurrently": "^1.0.0",
    "lite-server": "^1.3.1",
    "typescript": "^1.7.3"
  }
}

我将 sourceMap 从 true 更改为 false,因此在代码编辑器中,不会再次生成映射文件,但仍然生成了 js 文件。

我只想处理 ts 文件,不想得到 js 和 js.map 文件的早午餐,我该怎么做才能将我所有的 ts 文件放在我的常规开发文件中,例如 app 文件夹以及所有 js 和 js。将文件映射到名为 dist 的文件夹中?

一个很好的例子可能是angular2-webpack-quickstart但我不明白他们是怎么做到的?

任何建议如何做到这一点,当然不是手动。

谢谢,

6个回答

可能晚了,但这里有一个两步解决方案。

步骤1

通过更新更改system.config.js'app''dist/app'

var  map = {
    'app':                        'app', // 'dist/app',
    .
    .
    .
};

现在它看起来像这样:

var  map = {
    'app':                        'dist/app', // 'dist/app',
    .
    .
    .
};

第2步

创建dist文件夹。

编辑tsconfig.json并添加:

"outDir": "dist"

结果tsconfig.json

{
  "compilerOptions": {
    .
    .
    .
    .

    "outDir": "dist" // Pay attention here
  },
  "exclude": [
    .
    .
    .
  ]
}

运行npm start,您应该会看到dist文件夹中的所有编译.js.map.js文件

注意:通过其他答案。它们也非常有用和信息丰富。

你如何处理像@angular 这样所需的 node_modules ?您是否必须在每次构建时将所有这些都复制到 dist 目录中?
2021-04-21 23:58:25
我试过了,过了一会儿,在我的 dist 文件夹中创建了一个应用程序目录。
2021-04-26 23:58:25
对于未来的读者:问题的html/css files is not present in the dist folder答案如下......
2021-05-07 23:58:25
我试过这个,它有效。不幸的是,我的 html/css 文件不在 dist 文件夹中。如何复制 dist 文件夹中的所有 html/css?谢谢
2021-05-12 23:58:25
“dist”文件夹不需要提交,对吗?我已将它从我的 Visual Studio 项目中排除,并希望确保它是正确的。
2021-05-12 23:58:25

我的解决方案与上述略有不同。我从这里定义的 Angular2 Quickstart 种子开始:https : //github.com/angular/quickstart#create-a-new-project-based-on-the-quickstart

然后只更改了以下内容:

  • 添加"outDir": "../dist"tsconfig.json
  • 更改baseDir属性中bs-config.json"baseDir": ["dist", "src"]

然后npm run start像以前一样工作(甚至 html/css 和其他文件没有任何复制),但编译.js.map文件被内置dist/app并且不会污染您的src/app目录。

请注意,我还没有测试这如何影响测试。

有用!但是,有没有人和我一样有问题,用 Chrome DevTools 调试应用程序?我得到了空白的 .ts 文件。
2021-04-24 23:58:25
绝妙的解决方案。真的很容易而且很干净!
2021-05-03 23:58:25
这是最好的!
2021-05-04 23:58:25
这是最简单最干净的解决方案
2021-05-15 23:58:25

我也可能迟到了,但我做到了。

照拉希尔山说的去做

然后创建dist文件夹。

创建文件夹后,转到文件tsconfig.json并添加以下内容:

"outDir": "dist"

所结果的 tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "outDir": "dist"
  },
  "exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts"
  ]
}

如果你现在运行npm start和保存文件,你应该看到所有的编译.js.map.jsDIST文件夹中。

谢谢 raheel shan,你的回答开了个好头,

正如@Adavo 在评论中正确地提出的那样

不幸的是,我的 html/css 文件不在 dist 文件夹中。如何复制 dist 文件夹中的所有 html/css?

这个问题的答案是 * 在所有 .ts 文件中使用“/”(来自根目录)提供 HTML/CSS 文件的完整路径,主要在@Component 的“templateURL”属性中

经过很多时间 - 我明白了 - 不使用 Gulp :) Yipppeee

似乎不可能,您可以尝试使用 angular-cli 来更好地组织代码,但是也需要此 html 的完整路径
2021-04-19 23:58:25
是否有任何人可以建议这样做而无需提供完整路径的解决方案?...最好是一个简单的解决方案,不需要对其他工作的构建系统进行彻底检修。
2021-05-01 23:58:25
检查我的答案,这是一个非常干净的更改,有点操作 model.id stackoverflow.com/a/40694657/986160
2021-05-05 23:58:25
我想到了一个办法!请参阅我在下面提供的答案。我想它并不完美,但只使用 npm 脚本解决了问题,没有 grunt/gulp/angular-cli。并不是说我反对这些解决方案,只是我现在不想弄清楚它们!
2021-05-06 23:58:25

不幸的是,我的 html/css 文件不在 dist 文件夹中。如何复制 dist 文件夹中的所有 html/css?

Angular 2 中的相对路径并不是那么简单,因为根据Angular 2文章中的组件相对路径,框架希望灵活地加载文件(CommonJs、SystemJs 等)

正如文章所解释的,module.id当与 CommonJs 一起使用时(检查您的 tsconfig.json)包含module的绝对根,它可用于构建相对路径。

因此,更好的替代方法可能是将 css/html 文件与 ts 文件一起保留并像下面一样配置您的组件,假设您的构建文件位于名为dist的单独文件夹中。这样您的 css 和 html 文件将被加载通过将派生的构建路径转换为包含它们的源路径来使用相对路径没有问题 - 基本上是将/dist/删除或重命名为/src/;)

@Component({
   moduleId: module.id.replace("/dist/", "/"),
   templateUrl: 'relative-path-to-template/component.html',
...
});

如果您有单独的源文件夹和构建文件夹,则可以改为执行以下操作:

@Component({
   moduleId: module.id.replace("/dist/", "/src/"),
   templateUrl: 'relative-path-to-template/component.html',
...
});
尽管这是一个很好的解决方法...仍然是从我们的项目中获取所有项目文件的主要问题取决于两个不同的文件夹...有没有办法将我们的代码从单个文件夹部署到浏览器。提前致谢
2021-04-23 23:58:25
即使在 node_modules 的情况下,您也正在运行构建脚本。每个 node_modules 通常都有源 js 和 min.js 文件。所以我不明白为什么部署你的源代码然后运行你的构建脚本来下载 node_module 依赖项并编译将创建 dist 文件夹的typescript是一个问题。显然,您可以配置 webpack 或类似的进程以不同的方式进行打包。
2021-05-15 23:58:25