_.each(configs, (config) => { _.defaultsDeep(config, { // context: brickyard.dirs.tempModules, // bail: true, entry: [`${brickyard.dirs.tempModules}/main.js`], output: { path: www_dir, filename: 'lib/[name].[chunkhash:6].js', }, resolve: { modules: ['web_modules', 'node_modules'], extensions: ['.js', '.json'], alias, }, module: { loaders: [] }, node: { __filename: true, __dirname: true, fs: 'empty', }, }) brickyard.events.emit('build-webpack-config', config) if (!brickyard.argv.debug) { config.plugins.push(new webpack.DefinePlugin({ 'process.env': { NODE_ENV: '"production"', }, })) if (!brickyard.argv.noUglify) { config.plugins.push(new webpack.optimize.UglifyJsPlugin({ comments: false, })) } } })
webpack_build_with_config: function(cb) { const webpack = require('webpack') compiler = webpack(configs) const outputOption = { // output options assets: true, colors: true, version: true, hash: true, timings: true, chunks: false } if (brickyard.argv.watch) { if (brickyard.modules.buildtask['webpack-dev-server']) { brickyard.events.emit('build-webpack-dev-server', compiler) cb() return } let callback = cb compiler.watch({ poll: brickyard.argv.polling, }, function(err, stats) { if (err) throw err console.info('webpack watch', stats.toString(outputOption)) if (callback) { callback() callback = null } }) } else { compiler.run(function(err, stats) { if (err) throw err console.info('webpack build', stats.toString(outputOption)) cb() }) } },
'.scss', ] function tester(ext) { return (absPath) => { for (let i = 0; i < exts.length; i++) { if (absPath.toLowerCase().endsWith(exts[i])) { return exts[i] === ext } } return false } } brickyard.events.on('build-webpack-config', function(config) { const ExtractTextPlugin = require('extract-text-webpack-plugin') const etp = new ExtractTextPlugin('lib/style-scss.[contenthash:6].css') _.defaultsDeep(config, { module: { loaders: [] }, plugins: [] }) config.module.loaders.push({ test: tester(exts[0]), loader: 'style-loader/useable!css-loader!sass-loader', }) config.module.loaders.push({ test: tester(exts[1]), loader: etp.extract('css-loader!resolve-url-loader!sass-loader?sourceMap'), }) config.plugins.push(etp) })
const _ = require('lodash') const brickyard = require('brickyard') brickyard.events.on('build-webpack-config', (config) => { _.defaultsDeep(config, { module: { loaders: [] } }) config.module.loaders.push({ test: /\.js$/, loaders: ['babel-loader?presets[]=es2015&presets[]=react&presets[]=react-native&presets[]=stage-1'], }) config.resolve.alias['react-native'] = 'react-native-web' config.entry.unshift('babel-polyfill') })
hostname: config.host, port: config.port, }) } return config } brickyard.events.on('build-webpack-config', (config) => { if (!brickyard.argv.debug) { return } // no hash, ref to https://github.com/webpack/webpack-dev-server/issues/377 config.output.filename = 'lib/[name].js' // config.output.chunkname = '[name].js' if (!config.hot) { return } const webpack = require('webpack') _.defaultsDeep(config, { plugins: [] }) config.entry.push(`webpack-hot-middleware/client?${getConfig().serverUrl}&reload=true`) config.entry.push('webpack/hot/dev-server') config.plugins.push(new webpack.HotModuleReplacementPlugin()) }) brickyard.events.on('build-webpack-dev-server', (compiler) => { const express = require('express') const webpackDevMiddleware = require("webpack-dev-middleware") const webpackHotMiddleware = require("webpack-hot-middleware") const proxy = require('http-proxy-middleware') const morgan = require('morgan')
'use strict' const _ = require('lodash') const brickyard = require('brickyard') brickyard.events.on('build-webpack-config', function(config) { _.defaultsDeep(config, { module: { loaders: [] }, plugins: [] }) config.module.loaders.push({ test: /\.template\.html$/i, loader: 'ng-cache-loader?prefix=*', }) })
brickyard.ensureVersion('4.0.0-alpha') const watchConfig = brickyard.argv.polling ? { usePolling: true, interval: typeof (brickyard.argv.polling) === 'number' ? brickyard.argv.polling : 1500, } : {} /** * 监听生成目录,一旦变更触发livereload插件的运行 * @param cb */ brickyard.events.once('watch-output', () => { if (!brickyard.modules.buildtask['buildtask-build-browserify']) { return } const livereload = require('gulp-livereload') livereload.listen() require('chokidar').watch(`${brickyard.dirs.dest}/www/`, watchConfig) .on('change', _.debounce(path => livereload.changed(path), 500)) }) // rebuild if plan/buildtask/backend codes update brickyard.events.once('watch-backend', () => { const mds = _.filter(brickyard.modules, md => ['plan', 'buildtask', 'backend'].indexOf(md.type) !== -1) const watchee = _.map(mds, md => `${md.path}/`) console.log('watch plan, buildtask and backend modules', watchee) const onChange = _.debounce((path) => { console.log('File Changed:', path) process.send(BRICKYARD_CHILD_PROCESS_RUN_AGAIN) process.exit(0) }, 500)
brickyard.events.on('build-webpack-config', function(config) { _.defaultsDeep(config, { module: { loaders: [] } }) let npm_config = JSON.parse(fs.readFileSync(`${brickyard.dirs.dest}/package.json`)) let bower_config = JSON.parse(fs.readFileSync(`${brickyard.dirs.dest}/bower.json`)) let dependencies = _.extend(npm_config.dependencies, npm_config.devDependencies) dependencies = _.extend(npm_config.dependencies, bower_config.dependencies) // console.log(dependencies) if (dependencies.jquery) { config.module.loaders.push({ test: require.resolve('jquery'), loader: 'expose-loader?jQuery!expose-loader?$', }) } if (dependencies.bootstrap && dependencies.jquery) { config.module.loaders.push({ test: require.resolve('bootstrap'), loader: 'imports-loader?jQuery=jquery', }) } if (dependencies.angular && dependencies.jquery) { // 这里的作用是生成以下代码 // var jQuery = require('jquery') // require(angular) // module.exports = angular // 作用是: // 1. 加载angular前加载jquery,这样不用用户手动引入jquery // 2. 把全局的angular对象作为模块的返回,否则外部调用var angular=require('angular');会出问题 config.module.loaders.push({ test: require.resolve('angular'), loader: 'imports-loader?jQuery=jquery', }) } if (dependencies.ztree_v3) { config.resolve.alias.ztree_v3 = path.join(base, 'ztree_v3/js/jquery.ztree.all.js') } if (dependencies.wowjs) { config.module.loaders.push({ test: require.resolve('wowjs'), loader: 'expose-loader?WOW!exports-loader?this.WOW', }) } if (dependencies.respond) { config.module.loaders.push({ test: path.join(base, 'respond', 'dest', 'respond.src.js'), loader: 'imports-loader?this=>window', }) } })
const _ = require('lodash') const brickyard = require('brickyard') brickyard.events.on('build-webpack-config', (config) => { _.defaultsDeep(config, { module: { loaders: [] }, plugins: [] }) config.resolve.extensions.push('.ts', '.tsx') config.module.loaders.push({ test: /\.ts$/, loaders: [`awesome-typescript-loader?configFileName=${__dirname}/tsconfig.json`, 'angular2-template-loader', 'angular-router-loader'], }, { test: /\.html$/, loader: 'html-loader?minimize=false', }, { test: /\.component\.css$/, loader: 'raw-loader', }) })