typescript - Bruke CDN-filer med Angular2 og Webpack
Så jeg lurte på om det var en måte å inkludere CDN-filer sammen med en webpack-pakke. Jeg har lett rundt og har problemer med å sette opp et lite Angular2-repo som ikke gir feil med Typescript-transpileren (ved å bruke en CDN og uten Systemjs). Nederst i min index.html har jeg ulike avhengigheter for Angular2 inkludert fra cdn.js på denne måten:
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/2.0.0-beta.0/angular2-polyfills.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/2.0.0-beta.0/Rx.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/2.0.0-beta.0/angular2.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/2.0.0-beta.0/http.min.js"></script>
<script src="js/app.js"></script><!--bundle from webpack-->
Ved å bruke webpack normalt, forstår jeg at det vil se på node_modules som jeg har installert og deretter pakke dem inn i app.js som jeg spesifiserte nedenfor:
var webpack = require('webpack');
module.exports = {
entry: "./src/typescript/app",
devtool: 'source-map',
output: {
path: __dirname + "/app/js", publicPath: 'app/js', filename: "app.js"
},
resolve: {
extensions: ['', '.js', '.ts']
},
module: {
loaders: [{
test: /\.ts/, loaders: ['ts-loader'], exclude: /node_modules/
}]
}
};
Min tsconfig.json for referanse også:
{
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"module": "commonjs",
"removeComments": true,
"sourceMap": false
},
"exclude": [
"node_modules"
]
}
Men for denne koden vil jeg bare transpile og deretter sammenkoble kun mine Typescript-filer til én app.js-fil. Jeg vil ignorere node_modules og la js-filene fra CDN-ene over brukes i stedet. Likevel er jeg fortsatt forvirret over hvordan jeg kan få bundelen min til å vite at angular2 har blitt inkludert fra CDN, fordi det gir meg en feil som dette: Uncaught Error: Cannot find module "angular2/platform/browser".
All hjelp ville bli satt pris på!
Svar #1
CDN-filer forurenser vanligvis window med en variabel som burde være tilgjengelig. Du kan omdirigere webpack require-setninger for å hente ting fra window, for eksempel:
// webpack.config.js
module.exports = {
externals: {
'angular2/platform/browser': 'angular.platform.browser'
}
...
};
Selvfølgelig forventer jeg at du endrer angular.platform.browser til hvilken som helst global variabel du ønsker å bruke fra CDN-versjonen av Angular
Mer
Her er de relevante dokumentene: https://webpack.github.io/docs/library-and-externals.html
