Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 4.8k
Closed
Description
ok, I'm not a pro neither in webpack nor any of these new shiny 0.x.x version tech YET, so... But just in case someone would need it, here's how I got Bootstrap 4 (alpha now) + sass working:
- npm install bootstrap-loader --save
- npm install jquery --save
- npm install [email protected] --save
- npm install css-loader node-sass resolve-url-loader sass-loader style-loader url-loader --save-dev
- Added autoprefixer to web.config.js (to use with postcss - optional):
const autoprefixer = require('autoprefixer'); postcss: [autoprefixer], // this is inside module.exports object - Add loaders to webpack.config.js:
{test: /\.scss$/, loaders: ['style', 'css', 'postcss', 'sass'] },{test: /\.(woff2?|ttf|eot|svg)$/, loader: 'url?limit=10000' }, // Bootstrap 4{test: /bootstrap\/dist\/js\/umd\//, loader: 'imports?jQuery=jquery' } - Add jQuery plugin to webpack.config.js (to plugins array):
new ProvidePlugin({jQuery: 'jquery', $: 'jquery', jquery: 'jquery' }) - Add to the end of vendor.ts:
import 'jquery'; import 'bootstrap-loader'; - Add some Bootstrap markup to your home.html to see that it works
Resulting webpack.config.js:
// @AngularClass /* * Helper: root(), and rootDir() are defined at the bottom */ var path = require('path'); // Webpack Plugins var ProvidePlugin = require('webpack/lib/ProvidePlugin'); var DefinePlugin = require('webpack/lib/DefinePlugin'); var CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin'); var CopyWebpackPlugin = require('copy-webpack-plugin'); var HtmlWebpackPlugin = require('html-webpack-plugin'); var ENV = process.env.ENV = process.env.NODE_ENV = 'development'; const autoprefixer = require('autoprefixer'); var metadata ={title: 'IlgGallery UI', baseUrl: '/', host: '192.168.1.2', port: 3000, ENV: ENV }; /* * Config */ module.exports ={// static data for index.html metadata: metadata, // for faster builds use 'eval' devtool: 'source-map', debug: true, entry:{'vendor': './src/vendor.ts', 'main': './src/main.ts' // our angular app }, // Config for our build files output:{path: root('dist'), filename: '[name].bundle.js', sourceMapFilename: '[name].map', chunkFilename: '[id].chunk.js' }, resolve:{// ensure loader extensions match extensions: ['', '.ts', '.js', '.json', '.css', '.html'] }, module:{preLoaders: [{test: /\.ts$/, loader: 'tslint-loader', exclude: [/node_modules/] }], loaders: [ // Support for .ts files.{test: /\.ts$/, loader: 'ts-loader', query:{'ignoreDiagnostics': [ 2403, // 2403 -> Subsequent variable declarations 2300, // 2300 -> Duplicate identifier 2374, // 2374 -> Duplicate number index signature 2375 // 2375 -> Duplicate string index signature ] }, exclude: [/\.(spec|e2e)\.ts$/, /node_modules\/(?!(ng2-.+))/] }, // Support for *.json files.{test: /\.json$/, loader: 'json-loader' }, // Support for CSS as raw text{test: /\.css$/, loader: 'raw-loader' }, // support for .html as raw text{test: /\.html$/, loader: 'raw-loader' }, // if you add a loader include the resolve file extension above{test: /\.scss$/, loaders: ['style', 'css', 'postcss', 'sass'] },{test: /\.(woff2?|ttf|eot|svg)$/, loader: 'url?limit=10000' }, // Bootstrap 4{test: /bootstrap\/dist\/js\/umd\//, loader: 'imports?jQuery=jquery' } ] }, // sassResources: path.resolve(__dirname, "./node_modules/bootstrap/scss"), postcss: [autoprefixer], plugins: [ new CommonsChunkPlugin({name: 'vendor', filename: 'vendor.bundle.js', minChunks: Infinity }), // static assets new CopyWebpackPlugin([{from: 'src/assets', to: 'assets' }]), // generating html new HtmlWebpackPlugin({template: 'src/index.html', inject: false }), // replace new DefinePlugin({'process.env':{'ENV': JSON.stringify(metadata.ENV), 'NODE_ENV': JSON.stringify(metadata.ENV) } }), new ProvidePlugin({jQuery: 'jquery', $: 'jquery', jquery: 'jquery' }) ], // Other module loader config tslint:{emitErrors: false, failOnHint: false }, // our Webpack Development Server config devServer:{port: metadata.port, host: metadata.host, historyApiFallback: true, watchOptions:{aggregateTimeout: 300, poll: 1000 } }, // we need this due to problems with es6-shim node:{global: 'window', progress: false, crypto: 'empty', module: false, clearImmediate: false, setImmediate: false } }; // Helper functions function root(args){args = Array.prototype.slice.call(arguments, 0); return path.join.apply(path, [__dirname].concat(args))} function rootNode(args){args = Array.prototype.slice.call(arguments, 0); return root.apply(path, ['node_modules'].concat(args))} I haven't changed webpack.prod.config.js so authors could help us out here please.
werner, deepsoul, mycrocodile, hdngr, dongtong and 7 more
Metadata
Metadata
Assignees
Labels
No labels