Ionic:包含自定义webpack.config.js后livereload无法正常工作

时间:2018-01-11 04:25:25

标签: ionic-framework webpack ionic2

在我更新了typescript文件之后,app-script确实进行了构建过程,但结果仍然相同。 每次进行更改时,重新启动服务器都是非常烦人的工作

例如, 当我将一行代码从console.log('ABC')更改为console.log('DEF')时,控制台再次打印出ABC

  

我已经复制了一个示例Ionic 3项目来测试livereload而不使用自定义Web包配置文件,一切都很顺利。

好像我错过了自定义配置文件中的内容。我在这里做错了什么?

webpack.config.js

const path = require('path');
const webpackDefault = require('@ionic/app-scripts/config/webpack.config');
const webpackMerge = require('webpack-merge');

const customConfig = {
  dev: {
    resolve: {
      alias: {
        '@myproject-app': path.resolve('src/app'),
        '@myproject-environments': path.resolve('src/environments'),
        '@myproject-pages': path.resolve('src/pages'),
      }
    }
  },
  prod: {
    resolve: {
      alias: {
        '@myproject-app': path.resolve('src/app'),
        '@myproject-environments': path.resolve('src/environments'),
        '@myproject-pages': path.resolve('src/pages'),
      }
    }
  }
};

module.exports = webpackMerge(webpackDefault, customConfig);

cli包:(/ usr / local / lib / node_modules)

@ionic/cli-utils  : 1.19.0
ionic (Ionic CLI) : 3.19.0

全球套餐:

cordova (Cordova CLI) : 7.1.0

本地包裹:

@ionic/app-scripts : 3.1.7
Cordova Platforms  : android 6.3.0 browser ios 4.5.4
Ionic Framework    : ionic-angular 3.9.2

系统:

ios-deploy : 1.9.2
Node       : v8.9.0
npm        : 5.5.1
OS         : macOS High Sierra
Xcode      : Xcode 9.2 Build version 9C40b

2 个答案:

答案 0 :(得分:2)

我解决问题的方法是遵循gshigeto/ionic-environment-variables的步骤。我不必复制原始配置。我希望这个答案有助于其他人。

const chalk = require("chalk");
const fs = require('fs');
const path = require('path');
const useDefaultConfig = require('@ionic/app-scripts/config/webpack.config.js');

let env = process.env.IONIC_ENV;

useDefaultConfig.prod.resolve.alias = {
  "@projectname-app": path.resolve('src/app'),
  "@projectname-components": path.resolve('src/components'),
  "@projectname-core": path.resolve('src/core'),
  "@projectname-env": path.resolve(environmentPath('prod')),
  "@projectname-pages": path.resolve('src/pages'),
};

useDefaultConfig.dev.resolve.alias = {
  "@projectname-app": path.resolve('src/app'),
  "@projectname-components": path.resolve('src/components'),
  "@projectname-core": path.resolve('src/core'),
  "@projectname-env": path.resolve(environmentPath('dev')),
  "@projectname-pages": path.resolve('src/pages'),
};

if (env !== 'prod' && env !== 'dev') {
  // Default to dev config
  useDefaultConfig[env] = useDefaultConfig.dev;
  useDefaultConfig[env].resolve.alias = {
    "@projectname-env": path.resolve(environmentPath(env))
  };
}

function environmentPath(env) {
  var filePath = './src/environments/environment' + (env === 'prod' ? '' : '.' + env) + '.ts';
  if (!fs.existsSync(filePath)) {
    console.log(chalk.red('\n' + filePath + ' does not exist!'));
  } else {
    return filePath;
  }
}

module.exports = function () {
  return useDefaultConfig;
};

答案 1 :(得分:0)

我遇到了与您相同的问题,具有相同的确切实现。我能够通过简单地复制原始离子webpack配置并将其粘贴到我的自定义webpack配置文件中来解决这个问题。显然不像webpack-merge解决方案那样干净但是有效。