tl;dr
webpack.config.jsに以下を追加
module.exports = {
entry: './src/bin/main.js',
output: {filename:'./bin/main.js'},
+ target: "node",
module: {
loaders: [
これだけで、ES6のほうでnodejsの標準モジュールをrequireしたとき以下のようにコンパイルされるようになる。
/* 1 */ /***/ function(module, exports) { module.exports = require("fs"); /***/ },
おわり。
以下ログなので読まなくていいです
問題1: Module not found: Error: Cannot resolve module ‘fs’
ES6でnpmの簡単なbinつくりたいなと思ってて、webpack通してES5にするわけだけど、ビルドしようと思ったら以下のように叱られる
ERROR in ./src/bin/main.js Module not found: Error: Cannot resolve module 'fs' in /Users/otiai10/proj/js/npmfine/src/bin @ ./src/bin/main.js 6:9-22
ES6のほうで、require('fs')
してるんだけど、まあ無いよね、ってなる。
調査
モックを足せばいいのかな、って思って以下をwebpack.configに足す
node: { fs: "empty", }
問題2: fs.readFileSync is not a function
ビルドは通るようになるんだけど、使用側でこうなる。ビルド成果物を見るとこうなってる。
var fs = __webpack_require__(3);
/* 3 */ /***/ function(module, exports) { "use strict"; /***/ }
うーん、これはemptyだ。
調査
“node”: Compile for usage in a node.js-like environment (use require to load chunks)
nodejsで使われる用のrequireをするよ、と。
結論
単にwebpack.config.jsにtarget: "node"
を足せばよかっただけ
DRY
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2016/09/16
- メディア: 単行本
- この商品を含むブログを見る
改訂新版JavaScript本格入門 ?モダンスタイルによる基礎から現場での応用まで
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/30
- メディア: Kindle版
- この商品を含むブログを見る