在我们的项目中,我们一直在使用Object.keys()
和Object.values()
!因为它是基于Magento(1)的,我们已经将它与Prototype.js一起填充(不知道它来自那个)。
然而,我们发现了一些与Prototype.js直接相关的性能问题,因此我们希望将其删除。
我不想改变它们使用的每一个位置。相反,我想要一个好的polyfill,只为默认情况下不支持它的浏览器加载。我希望polyfill托管在我们的服务器上,以避免任何奇怪的错误,如果cdn被关闭(我们有自己的cdn解决方案)。
巴别塔的一切都让我感到困惑。 Webpack对我来说也是半新的并且有时令人困惑.. webpack.config的语法似乎发生了变化,因为我们正在使用一些较旧的规范。尝试关注文档和谷歌搜索答案更令人困惑。我想我们应该更新到新规范。很快一段时间
我们今天有相关章节,
webpack.config.js:
const path = require('path');
const webpack = require('webpack');
const BUILD_DIR = path.resolve(__dirname, 'build/');
const APP_DIR = path.resolve(__dirname, 'src/');
module.exports = function config(env, argv = {}) {
return {
entry: ['core-js', 'formdata-polyfill', 'whatwg-fetch', `${APP_DIR}/index.js`],
output: {
path: BUILD_DIR,
filename: 'react-frontend.js',
},
resolve: {
extensions: ['.js', '.jsx'],
modules: [
path.resolve(__dirname, 'src/'),
'node_modules',
],
alias: {
companyName: path.resolve(__dirname, './src/companyName.js'),
},
},
module: {
loaders: [
{
test: /\.jsx?$/,
include: APP_DIR,
loader: ['babel-loader', 'eslint-loader'],
},
packages.json
{
"dependencies": {
"babel-core": "^6.26.0",
"babel-loader": "^7.1.4",
"babel-plugin-transform-object-assign": "^6.22.0",
"babel-plugin-transform-proto-to-assign": "^6.26.0",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-es2017-node7": "^0.5.2",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"babel-runtime": "^6.26.0",
"core-js-bundle": "^3.0.0-alpha.1",
"formdata-polyfill": "^3.0.12",
"react": "^16.3.0",
"webpack": "^3.11.0",
"whatwg-fetch": "^2.0.4"
我害怕只是添加https://babeljs.io/docs/en/babel-polyfill/,如果它为我们已经有polyfills的东西添加polyfills ..
除了Object.values()
,我们似乎有其他我们需要的工作polyfill,支持最常用的浏览器最新的2个版本+ IE11。
或者我们应该添加:https://www.npmjs.com/package/es7-object-polyfill?
编辑:更新的问题,我看到Object.keys()
已经工作但不是Object.values()
。
我现在注意到Object.keys()
已经工作正常,但不是Object.values()
,这似乎与Object.entries()
略有不同
所以我为此添加了一个简单的polyfill。
index.js
import './polyfills';
polyfills.js
const objectToValuesPolyfill = (object) => {
return Object.keys(object).map(key => object[key]);
};
Object.values = Object.values || objectToValuesPolyfill;