我在尝试要求html文件时遇到一个奇怪的错误。有问题的代码是一个用typescript编写并使用webpack的AngularJs应用程序。
app.directive.ts
// require('./app.scss');
// import AppController from './app.controller';
function AppDirective(): ng.IDirective {
return {
restrict: 'E',
scope: {},
controllerAs: 'vm',
// controller: AppController,
controller: () => {},
// template: require('./app.html')
template: '<div>this is a test</div>'
}
}
angular
.module('myApp')
.directive('appDirective', AppDirective);
app.controller.ts
export default class AppController {
public static $inject = ['$scope'];
constructor(private $scope) {
}
}
app.html
<div>
THIS IS A TEST, REMAIN CALM
</div>
app.scss为空。
现在,按照包含的注释,此代码在webpack中构建时没有错误,并将使用webpack dev服务器进行部署。
使用webpack dev服务器,它允许您在服务器运行时更改代码并重新加载它,我可以取消注释任何/所有注释行,它将正常工作。
但是,如果我关闭开发服务器并重建,则无法提供此错误:
未捕获的TypeError:无法读取未定义的属性“call”
Uncaught TypeError: Cannot read property 'call' of undefined__webpack_require__ @ bootstrap 9163605…:50
webpackJsonp.152 @ app.ts:2__webpack_require__ @ bootstrap 9163605…:50
webpackJsonp.153 @ main.browser.ts:1__webpack_require__ @ bootstrap 9163605…:50
webpackJsonp.0 @ main.bundle.js:7__webpack_require__ @ bootstrap 9163605…:50
webpackJsonpCallback @ bootstrap 9163605 ...:21(匿名函数)@main.bundle.js:1
在webpack的这一行失败:boostrap文件:
modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
尝试取消注释app.scss行,控制器行或app.html行时发生此错误。只有在重建之后才会发生这种情况,任何或所有行都会被取消注释。
我正在使用webpack构建,并在tsconfig中使用commonjs进行模块加载,我在webpack.config中为这些类型的文件提供了以下webpack加载器:
{
test: /\.ts$/,
loader: 'awesome-typescript-loader',
exclude: [/\.(spec|e2e)\.ts$/]
},
{
test: /\.scss$/,
loader: 'style-loader!css-loader!sass-loader'
},
{
test: /\.html$/,
loader: 'raw-loader',
exclude: [helpers.root('src/index.html')]
},
我一直在使用角度js和打字稿,但这是第一次启动我自己的项目,而且我仍然在webpack中磕磕绊绊。
我很困惑,为什么这个代码在它运行时插入它会起作用,但是在重建后停止工作。我认为它与我的webpack配置有关,但我无法弄明白,我已经坚持了一段时间。任何帮助将不胜感激。
更新 我找到了原因,但没有找到解决方案。它似乎是由我的webpack配置中的CommonsChunkPlugin引起的:
new webpack.optimize.CommonsChunkPlugin({
name: helpers.reverse(['polyfills', 'vendor', 'main']),
// minChunks: Infinity
}),
如果我删除了插件,则错误消失,但之后我不再拥有此插件。
更新2
将插件初始化更改为可解决此问题:
new webpack.optimize.CommonsChunkPlugin({
names: ['polyfills', 'vendor', 'main'],
minChunks: 2
}),
但我仍然不明白为什么
答案 0 :(得分:0)
如果您在同一页面上加载了多个webpack编译的文件,它们将相互覆盖。使用module.output.library
选项定义&#39;命名空间&#39;为您的应用程序。
答案 1 :(得分:0)
Posting update #2 as answer as per Zze's recommendation.
Changing the plugin initialization to this fixes the issue:
new webpack.optimize.CommonsChunkPlugin({
names: ['polyfills', 'vendor', 'main'],
minChunks: 2
}),
But I still don't understand why