2017-08-31 53 views
0

“丝线行进建立生产”我提前道歉我近似英语:)“语法错误:意外的标记{”时:分期

这里是一个小总结一下: 我们有一个Rails项目4,我们最近添加了一些React组件和React_on_rails gem,所以我们需要将Webpack作为Asset Pipeline的朋友(是的,我知道,Rails 5的确做得更好)

所以问题是,当我尝试部署在试图做yarn run build:production时:

$ NODE_ENV=production webpack -p --config webpack.config.js 
/home/unisc/apps/staging/releases/20170831104131/client/node_modules/react-on-rails/webpackConfigLoader.js:14 
const { join, resolve } = require('path'); 
    ^

SyntaxError: Unexpected token { 
    at exports.runInThisContext (vm.js:53:16) 
    at Module._compile (module.js:373:25) 
    at Object.Module._extensions..js (module.js:416:10) 
    at Module.load (module.js:343:32) 
    at Function.Module._load (module.js:300:12) 
    at Module.require (module.js:353:17) 
    at require (internal/module.js:12:17) 
    at Object.<anonymous> (/home/unisc/apps/****_staging/releases/20170831104131/client/webpack.config.js:13:27) 
    at Module._compile (module.js:409:26) 
    at Object.Module._extensions..js (module.js:416:10) 

这里是我的package.json:

{ 
    "name": "****", 
    "private": true, 
    "scripts": { 
    "build:test": "NODE_ENV=test webpack --config webpack.config.js", 
    "build:production": "NODE_ENV=production webpack --config webpack.config.js", 
    "build:development": "NODE_ENV=development webpack -w --config webpack.config.js" 
    }, 
    "cacheDirectories": ["node_modules", "client/node_modules"], 
    "dependencies": { 
    "babel-cli": "^6.24.1", 
    "babel-core": "^6.24.1", 
    "babel-loader": "^6.3.2", 
    "babel-runtime": "^6.23.0", 
    "babel-polyfill": "^6.23.0", 
    "babel-preset-es2015": "^6.24.1", 
    "babel-preset-react": "^6.24.1", 
    "babel-preset-stage-2": "^6.24.1", 
    "es5-shim": "^4.5.9", 
    "expose-loader": "^0.7.3", 
    "imports-loader": "^0.7.1", 
    "js-yaml": "^3.8.2", 
    "react": "^15.5.4", 
    "react-dom": "^15.5.4", 
    "react-on-rails": "8.0.0", 
    "webpack": "^2.3.3", 
    "webpack-manifest-plugin": "^1.1.0" 
    }, 
    "devDependencies": { 
    } 
} 

和我webpack.config.js:

// For inspiration on your webpack configuration, see: 
// https://github.com/shakacode/react_on_rails/tree/master/spec/dummy/client 
// https://github.com/shakacode/react-webpack-rails-tutorial/tree/master/client 

const webpack = require('webpack'); 
const { resolve } = require('path'); 

const ManifestPlugin = require('webpack-manifest-plugin'); 
const webpackConfigLoader = require('react-on-rails/webpackConfigLoader'); 

const configPath = resolve('..', 'config'); 
const { devBuild, manifest, webpackOutputPath, webpackPublicOutputDir } = 
    webpackConfigLoader(configPath); 

const config = { 

    context: resolve(__dirname), 

    entry: { 
    'webpack-bundle': [ 
     'es5-shim/es5-shim', 
     'es5-shim/es5-sham', 
     'babel-polyfill', 
     './app/bundles/registration', 
    ], 
    }, 

    output: { 
    // Name comes from the entry section. 
    filename: '[name]-[hash].js', 

    // Leading slash is necessary 
    publicPath: `/${webpackPublicOutputDir}`, 
    path: webpackOutputPath, 
    }, 

    resolve: { 
    extensions: ['.js', '.jsx'], 
    }, 

    plugins: [ 
    new webpack.EnvironmentPlugin({ 
     NODE_ENV: 'development', // use 'development' unless process.env.NODE_ENV is defined 
     DEBUG: false, 
    }), 
    new ManifestPlugin({ fileName: manifest, writeToFileEmit: true }), 
    ], 

    module: { 
    rules: [ 
     { 
     test: require.resolve('react'), 
     use: { 
      loader: 'imports-loader', 
      options: { 
      shim: 'es5-shim/es5-shim', 
      sham: 'es5-shim/es5-sham', 
      }, 
     }, 
     }, 
     { 
     test: /\.jsx?$/, 
     use: 'babel-loader', 
     exclude: /node_modules/, 
     }, 
    ], 
    }, 
}; 

module.exports = config; 

if (devBuild) { 
    console.log('Webpack dev build for Rails'); // eslint-disable-line no-console 
    module.exports.devtool = 'eval-source-map'; 
} else { 
    console.log('Webpack production build for Rails'); // eslint-disable-line no-console 
} 

我试图找到没有成功的同样的问题...

这命令在我的机器上运行,两者(我的机器和分段)都具有相同版本的webpack,并且无论如何它们都使用node_modules中的一个。

感谢您的阅读,并有一个愉快的一天;)

我已经试过:

  • NPM升级,升级纱,消除node_modules并再次尝试
  • 转换整个配置文件到ES5,但碰到另一个大括号中的依赖
  • 尝试移动,删除.babelrc文件

什么,我其实是想:

  • 样子ES6 transpilation的日子不好过
+0

你有'.babelrc'文件吗? –

+0

哇,你快!这里是: '{ “预设”:[“es2015”,“stage-2”,“react”] }' – Bakhah

+0

检查您调用部署任务的目录中是否存在'babelrc'。 –

回答

0

定了!

由于Michael Jungo,问题是,在的NodeJS不更新临时服务器上,所以花括号无法读取...

谢谢!! 反正我失去了很多时间......