我最近下载了Angular CLI(@angular/cli 9.0.1).然后我开始创建一个新的应用程序,这样我就可以创建一个新的Angular 元素,将其打包,并在另一个应用程序中使用.

在浏览了几篇博客之后,我遇到的每一篇博客的最后一步都在谈论从dist/文件夹下生成的文件创建一个JS文件.例如:https://blog.bitsrc.io/using-angular-elements-why-and-how-part-1-35f7fd4f0457

然后使用cat命令连接runtime.js

相反,运行ng build angular-app --prod --output-hashing=none似乎会生成名为:

  • main-es5.js
  • main-es2015.js
  • polyfills-es5.js
  • polyfills-es2015.js
  • 运行时es5.js
  • runtime-es2015.js

我搜索了每一个包含es5es2015的文件,并将其更改为es6,但它仍然生成相同的es5es2015文件名.我做错了什么?

推荐答案

Angular不会将JavaScript文件Bundle 到单个文件中.

您可以添加一个构建步骤来将这些文件连接在一起.

concat-build.js:

var concat = require('concat');
const es5 = ['./dist/app/runtime-es5.js','./dist/app/polyfills-es5.js','./dist/app/main-es5.js'];
const es2015= ['./dist/app/runtime-es2015.js','./dist/app/polyfills-es2015.js','./dist/app/main-es2015.js'];
concat(es5, './dist/app/elements-es5.js');
concat(es2015, './dist/app/elements-es2015.js');

package.json:

"scripts": {
   "concat": "node ./concat-builds.js",
   "build": "ng build --prod --output-hashing=none && npm run concat"
}

不要对ES5和ES2015版本感到困惑,因为Angular团队根据模块的加载方式(不特别是JavaScript版本)来拆分Bundle 包.

支持模块的Web浏览器将加载ES2015版本,而不是ES5版本,但建议在Html中加载both个.

如果您只想使用single个文件,那么您必须使用较旧的ES5版本,并应按如下方式提供:

<script src="elements-es5.js">

建议按如下方式提供这两个文件,浏览器将加载相应的版本:

<script src="elements-es5.js" nomodule defer>
<script src="elements-es2015.js" type="module">

请注意:

较旧的浏览器将忽略type="module"版本,而较新的浏览器将忽略nomodule版本.

Typescript相关问答推荐

Angular 17 -如何在for循环内创建一些加载?

状态更新后未触发特定元素的Reaction CSS转换

Next.js错误:不变:页面未生成

如何在typescript中设置对象分配时的键类型和值类型

来自类型脚本中可选对象的关联联合类型

如何在Reaction路由v6.4加载器和操作中获得Auth0访问令牌?

有没有可能产生输出T,它在视觉上省略了T中的一些键?

如何在省略一个参数的情况下从函数类型中提取参数类型?

自定义 Select 组件的类型问题:使用带逗号的泛型类型<;T与不带逗号的<;T&>;时出错

打字错误推断

ANGLE NumberValueAccessor表单控件值更改订阅两次

在单独的组件中定义React Router路由

Angular NG8001错误.组件只能在一个页面上工作,而不是在她的页面上工作

在Thunk中间件中输入额外参数时Redux工具包的打字脚本错误

如何在Nextjs路由处理程序中指定响应正文的类型

基于属性值的条件类型

为什么我无法在 TypeScript 中重新分配函数?

有没有办法从不同长度的元组的联合中提取带有类型的最后一个元素?

如何强制对象数组中的对象属性具有非空字符串值?

将 Angular 从 14 升级到 16 后出现环境变量注入问题