Răsfoiți Sursa

build: refactor webpack configs

Micooz 7 ani în urmă
părinte
comite
e800d3e83d
4 a modificat fișierele cu 207 adăugiri și 91 ștergeri
  1. 1 0
      src/index.js
  2. 0 91
      webpack.config.js
  3. 102 0
      webpack/dev.config.js
  4. 104 0
      webpack/prod.config.js

+ 1 - 0
src/index.js

@@ -0,0 +1 @@
+window.DPlayer = require('./DPlayer');

+ 0 - 91
webpack.config.js

@@ -1,91 +0,0 @@
-var webpack = require('webpack');
-var path = require('path');
-var autoprefixer = require('autoprefixer');
-var ExtractTextPlugin = require('extract-text-webpack-plugin');
-
-var libraryName = 'DPlayer';
-var env = process.env.WEBPACK_ENV;
-var ROOT_PATH = path.resolve(__dirname);
-var APP_PATH = path.resolve(ROOT_PATH, 'src');
-var BUILD_PATH = path.resolve(ROOT_PATH, 'dist');
-
-var dev = env === 'dev';
-var plugins = [].concat(dev ? [] : [
-    new webpack.optimize.UglifyJsPlugin({
-        sourceMap: true,
-        compressor: {
-            warnings: false,
-            conditionals: true,
-            unused: true,
-            comparisons: true,
-            sequences: true,
-            dead_code: true,
-            evaluate: true,
-            if_return: true,
-            join_vars: true,
-            negate_iife: false
-        },
-        output: {
-            comments: false
-        }
-    }),
-    new ExtractTextPlugin(`${libraryName}.min.css`)
-]);
-
-module.exports = {
-    entry: './src/' + libraryName + '.js',
-
-    output: {
-        path: BUILD_PATH,
-        filename: libraryName + '.min.js',
-        library: libraryName,
-        libraryTarget: 'umd',
-        umdNamedDefine: true
-    },
-
-    devtool: dev ? 'eval-source-map' : 'source-map',
-
-    devServer: {
-        publicPath: "/dist/",
-    },
-
-    module: {
-        rules: [
-            {
-                enforce: 'pre',
-                test: /\.js$/,
-                loader: 'eslint-loader',
-                include: APP_PATH,
-                options: {
-                    configFile: './.eslintrc'
-                },
-            },
-            {
-                test: /\.js$/,
-                loader: 'template-string-optimize-loader',
-                include: APP_PATH,
-            },
-            {
-                test: /\.js$/,
-                loader: 'babel-loader',
-                include: APP_PATH,
-                options: {
-                    presets: ['es2015']
-                }
-            },
-            {
-                test: /\.scss$/,
-                use: dev ? ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader'] : ExtractTextPlugin.extract({
-                    use: ['css-loader?minimize&-autoprefixer', 'postcss-loader', 'sass-loader']
-                }),
-                include: APP_PATH
-            },
-            {
-                test: /\.(png|jpg)$/,
-                loader: 'url-loader?limit=40000'
-            }
-        ]
-    },
-
-    plugins: plugins
-};

+ 102 - 0
webpack/dev.config.js

@@ -0,0 +1,102 @@
+const path = require('path');
+const webpack = require('webpack');
+
+module.exports = {
+
+  devtool: 'cheap-module-source-map',
+
+  entry: {
+    'DPlayer': './src/index.js'
+  },
+
+  output: {
+    path: path.resolve(__dirname, '..', 'dist'),
+    filename: '[name].js',
+    publicPath: '/'
+  },
+
+  resolve: {
+    modules: ['node_modules'],
+    extensions: ['.js', '.scss']
+  },
+
+  module: {
+    strictExportPresence: true,
+    rules: [
+      {
+        test: /\.js$/,
+        enforce: 'pre',
+        loader: require.resolve('eslint-loader'),
+        include: path.resolve(__dirname, '../src'),
+      },
+      {
+        test: /\.js$/,
+        use: [
+          {
+            loader: require.resolve('babel-loader'),
+            options: {
+              cacheDirectory: true,
+              presets: ['env']
+            }
+          }
+        ]
+      },
+      {
+        test: /\.scss$/,
+        use: [
+          require.resolve('style-loader'),
+          {
+            loader: require.resolve('css-loader'),
+            options: {
+              importLoaders: 1
+            }
+          },
+          {
+            loader: require.resolve('postcss-loader'),
+            options: {
+              ident: 'postcss'
+            }
+          },
+          require.resolve('sass-loader')
+        ]
+      },
+      {
+        test: /\.(png|jpg)$/,
+        loader: require.resolve('url-loader'),
+        options: {
+          'limit': 40000
+        }
+      }
+    ]
+  },
+
+  devServer: {
+    compress: true,
+    contentBase: path.resolve(__dirname, '..', 'demo'),
+    clientLogLevel: 'none',
+    quiet: false,
+    open: true,
+    historyApiFallback: {
+      disableDotRule: true
+    },
+    watchOptions: {
+      ignored: /node_modules/
+    }
+  },
+
+  plugins: [
+    new webpack.NamedModulesPlugin()
+  ],
+
+  node: {
+    dgram: 'empty',
+    fs: 'empty',
+    net: 'empty',
+    tls: 'empty'
+  },
+
+  performance: {
+    hints: false
+  }
+
+};

+ 104 - 0
webpack/prod.config.js

@@ -0,0 +1,104 @@
+const path = require('path');
+const webpack = require('webpack');
+const ExtractTextPlugin = require('extract-text-webpack-plugin');
+
+module.exports = {
+
+  bail: true,
+
+  devtool: 'source-map',
+
+  entry: {
+    'DPlayer': './src/index.js'
+  },
+
+  output: {
+    path: path.resolve(__dirname, '..', 'dist'),
+    filename: '[name].min.js',
+    publicPath: '/'
+  },
+
+  resolve: {
+    modules: ['node_modules'],
+    extensions: ['.js', '.scss']
+  },
+
+  module: {
+    strictExportPresence: true,
+    rules: [
+      {
+        test: /\.js$/,
+        enforce: 'pre',
+        loader: require.resolve('eslint-loader'),
+        include: path.resolve(__dirname, '../src'),
+      },
+      {
+        test: /\.js$/,
+        use: [
+          require.resolve('template-string-optimize-loader'),
+          {
+            loader: require.resolve('babel-loader'),
+            options: {
+              compact: true,
+              presets: ['env']
+            }
+          }
+        ]
+      },
+      {
+        test: /\.scss$/,
+        use: ExtractTextPlugin.extract({
+          fallback: require.resolve('style-loader'),
+          use: [
+            {
+              loader: require.resolve('css-loader'),
+              options: {
+                importLoaders: 1,
+                minimize: true,
+                sourceMap: true
+              }
+            },
+            {
+              loader: require.resolve('postcss-loader'),
+              options: {
+                ident: 'postcss'
+              }
+            },
+            require.resolve('sass-loader')
+          ]
+        })
+      },
+      {
+        test: /\.(png|jpg)$/,
+        loader: require.resolve('url-loader'),
+        options: {
+          'limit': 40000
+        }
+      }
+    ]
+  },
+
+  plugins: [
+    new webpack.optimize.UglifyJsPlugin({
+      compress: {
+        warnings: false
+      },
+      output: {
+        comments: false,
+        ascii_only: true
+      },
+      sourceMap: true
+    }),
+    new ExtractTextPlugin({
+      filename: '[name].min.css'
+    })
+  ],
+
+  node: {
+    dgram: 'empty',
+    fs: 'empty',
+    net: 'empty',
+    tls: 'empty',
+  }
+
+};