fex-team / fis3-hook-node_modules

fis3 node_modules 支持
81 stars 12 forks source link

关于env的建议 #34

Closed ccqgithub closed 8 years ago

ccqgithub commented 8 years ago

最近发现vue、react等都通过process.env.NODE_ENV 控制log等。而构建的时候将变量替换为对应的值。 本来准备模仿webpack的DefinePlugin写一个fis3-preprocessor-define插件,却发现通过fis3打包的react已经替换,研究下发现是这个插件的功能。

但是,我认为不应该将process.env.NODE_ENV的解析放在这个插件里。更好的方法是模仿webpack写一个fis3-preprocessor-define的插件。

原因:第一,不只是node_modules 里的代码需要类似的功能,可能自己写的模块也需要。第二,单独通过压缩不压缩来区分环境,不太清晰灵活。第三,可能需要替换的不止这一个变量,还会有CUSTOM_ENV等……

个人认为类似webpack的define插件,写成如下这种方式最好。


fis
.media('prod')
.match('**.js', {
  preprocessor: fis.plugin('define', {
    "process.env": {
        NODE_ENV: JSON.stringify("production"),
        LOG: "false",
        CUSTOM_INFO: {
            version: '1.0.1',
            author: 'aaaa'
        }
     }
  })
})

fis
.media('test')
.match('**.js', {
  preprocessor: fis.plugin('define', {
    "process.env": {
        NODE_ENV: JSON.stringify("development"),
        LOG: "true"
     }
  })
})
2betop commented 8 years ago

不错,要不你来发布一个吧,反正 define 处理了,这个插件是不会再处理的。

我认为 node_modules 的重点是要 browserify ,即保障代码能在浏览器中运行。所以就简单的处理了下 node_modules 中一些用法。

两个的定位不一样,再写个 fis3-preprocessor-define 也不冲突。

ccqgithub commented 8 years ago

@2betop 也是,就是不知道hook插件具体在哪个阶段运行的呢?是在standard阶段么?

2betop commented 8 years ago

hook 跑到了最前面,应该往后放到标准化的时候。这块我会修改这个插件。

ccqgithub commented 8 years ago

好的 🐱 👍

codering commented 8 years ago

这个好!

renxia commented 8 years ago

@2betop 提个建议: 文件属性参数 skipBrowserify 可以写到 README.MD 文档里。这个在项目规模较大的情况下还是比较重要的。

对于旧的项目兼容的情况下,一般来说,只有 node_modules 下的模块才需要 browserify 处理。 而且,node_modules 下的模块也不是所有的都适合做处理。 一个 shimBuffer 配置全局又太果断了

2betop commented 8 years ago

加了

renxia commented 8 years ago

@2betop 响应好快,赞! 另外一个问题,这个silent应该是通过 lookup:file事件带过来的参数,具体是怎么配置实现的。 对于非 node_modules 目录下的模块,会出现不少的 WARNI

2betop commented 8 years ago

配置不了,有个提示还是挺好的,除非误判了。看什么误判了,fis3 可以调整。

renxia commented 8 years ago

好吧。主要是对旧的项目作兼容,之前的一些插件在配置和引用上各种方式都有。后面逐个的去改好了

ccqgithub commented 8 years ago

👍 提示没大问题,就是怕有时候文件的内置require刚好和外面的一个安装的模块重名,然后被错误地依赖进去…… 比如用webuploader的时候老提示我装zepto,如果zepto装了就被打包进去了。。 新版本还没试用,还不清楚问题是否存在~