2016-11-14 5 views
1

У меня есть код, подобный этому:Strip динамический требует от WebPack

export default { 
    something: true, 
    mockData: process.env.USE_MOCK && require('./mocks/something.js').default 
}; 

process.env.USE_MOCK устанавливается с webpack.DefinePlugin либо true или false. Я использую это, чтобы запустить мое приложение с USE_MOCK=true npm run dev или npm run dev, чтобы либо работать с макетными данными, либо нет.

Я хочу, чтобы Webpack удалял эти динамические требования в процессе сборки с устранением мертвого кода UglifyJS, но я заметил, что они остаются там, и поэтому something.js будет в построенном пакете.

В моем случае вывод аналогичен:

module.exports = { 
    something: true, 
    mockData: (false) && __webpack_require__(181).default 
}; 

Есть ли способ, как я могу удалить, что импорт полностью из пакета?

КПП. Я думаю, что-то вроде это работает:

let mockData; 
if (process.env.USE_MOCK) { 
    mockData = require('./mocks/something.js').default; 
} 
export default { 
    something: true, 
    mockData 
}; 

Я предпочел бы инлайн требуют, хотя, как я получил тот образец достаточно несколько раз.

ответ

1

попробовать что-то вроде этого:

export default { 
    something: true, 
    mockData: process.env.USE_MOCK ? require('./mocks/something.js').default : undefined 
}; 

Или построить экспортный модуль отдельно:

let module_export; 
module_export.something = true; 

if (process.env.USE_MOCK) { 
    module_export.mockData = require('./mocks/something.js').default; 
} 

export module_export; 
+0

Действительно, тройной оператор сделал трюк. 'process.env.USE_MOCK? require ('./ mocks/something.js'). default: null' также работает и немного короче. Благодаря! – amann

Смежные вопросы