Реализация кэширования таким образом, чтобы при новой загрузке сборки очистка кэша не требовалась - PullRequest
0 голосов
/ 26 мая 2018

Я разработал свой проект на Angular 2, используя webpack .Всякий раз, когда я развертываю свою новую сборку, клиентская сторона должна очищать кэш , чтобы просмотреть изменения, внесенные кодом.Ниже мой webpack.config.js:

const path = require('path');
const webpack = require('webpack');
const typescript = require('typescript');
const { AotPlugin } = require('@ngtools/webpack');

const rules = [
  { test: /\.html$/, loader: 'html-loader' },
  { test: /\.scss$/, loaders: ['raw-loader', 'sass-loader'] },
  { test: /\.(jpe?g|png|gif|svg)$/i, loader: 'file-loader' }
];

const plugins = [
  new webpack.DefinePlugin({
    'process.env': {
      'NODE_ENV': JSON.stringify(process.env.NODE_ENV)
    }
  }),
  new webpack.optimize.CommonsChunkPlugin({
    name: 'vendor',
    minChunks: (module) => module.context && /node_modules/.test(module.context)
  })
];


rules.push({
    test: /\.ts$/,
    loaders: [
    'awesome-typescript-loader', 'angular-router-loader', 'angular2-template-loader'
    ]
});

plugins.push(
    new webpack.NamedModulesPlugin(),
    new webpack.ContextReplacementPlugin(/angular(\\|\/)core(\\|\/)@angular/, path.resolve(__dirname, './notfound')),
    new webpack.LoaderOptionsPlugin({
    minimize: true,
    debug: false
    }),
    new webpack.optimize.UglifyJsPlugin({
    sourceMap: true,
    beautify: false,
    mangle: {
        screw_ie8: true
    },
    compress: {
        unused: true,
        dead_code: true,
        drop_debugger: true,
        conditionals: true,
        evaluate: true,
        drop_console: true,
        sequences: true,
        booleans: true,
        screw_ie8: true,
        warnings: false
    },
    comments: false
    })
);


module.exports = {
  cache: true,
  context: __dirname,
  devServer: {
    contentBase: __dirname,
    historyApiFallback: true,
    stats: {
      chunks: true,
      chunkModules: true,
      chunkOrigins: true,
      errors: true,
      errorDetails: true,
      hash: true,
      timings: true,
      modules: true,
      warnings: true
    },
    publicPath: './build/',
    port: 3000
  },
  devtool: 'sourcemap',
  entry: {
    app: ['zone.js/dist/zone', './app/main.ts']
  },
  output: {
    filename: '[name].js',
    chunkFilename: 'lfd6093bc62332f579200891cc0e9c8[name].js',
    publicPath: './build/',
    path: path.resolve(__dirname, 'build')
  },
  node: {
    console: true,
    global: true,
    process: true,
    Buffer: false,
    setImmediate: false
  },
  module: {
    rules
  },
  resolve: {
    extensions: ['.ts', '.js'],
    modules: [
      'app',
      'node_modules'
    ]
  },
  plugins
};

Есть ли способ, которым я могу преодолеть это только на стороне клиента ?Если не будет моей последней меры, я буду проверять версию API и выдавать всплывающее окно пользователю для очистки кэша.

1 Ответ

0 голосов
/ 28 мая 2018

Веб-пакет не знает, изменились ли файлы по умолчанию, но вы можете помочь веб-пакету, изменив имя выходного файла и добавив к нему contenthash:

output: { filename: '[name].[contenthash].js'}

Сделав этобудет создан хеш на основе содержимого файла, если содержимое файла изменится, это изменение хеша, так что webpack знает, что он должен перестроить все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...